![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Micher |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
Я тут как то на форуме спрашивал, как 2 процесса оперировать данными через оперативку(так быстрее, чем через файл). Многие посоветовали юзать FileMapping. Я не вдаваясь в теорию, написал код. Сейчас нашёл такое:
--- FileMapping - записывает данные на жеский диск в файл подкачки Под "памятью" в Windows подразумевается не только физическая память (ОЗУ), но также память, резервируемая операционный системой на жестком диске. Этот вид памяти называется "виртуальной памятью" и образует так называемый страничный свап-файл или "файл подкачки". По мере необходимости операционная среда обращается к этому файлу, чтобы поместить в него пока ненужные системе данные или наоборот считать в ОЗУ уже потребовавшиеся данные (как все это система делает надо спросить у Билла Гейтса). Но, не вдаваясь в подробности реализации страничных файлов подкачки, мы можем использовать эту особенность Windows в своих интересах. Например, поместить каким-то способом в свап-файл нужные уже НЕ СИСТЕМЕ, А НАМ данные, чтобы затем можно было бы обратиться к этому файлу из любого другого процесса и считать или изменить нужные данные. К счастью, WinAPI предоставляет способ работы со свап-файлом посредством так называемого объекта файлового отображения. --- Т.е. я так понимаю FileMapping этот тоже самое что работать через файл? Или я не прав? В общем, если не трудно, может ктото сказать, какие преимущества у FM перед работой с файлом обычным? Больше всего интересует конечно, скорость. Спасибо |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
При использовании FileMapping винда сама решает когда юзать дисковый файл, а когда обойтись буфером в памяти (и не так уж глупо решает), а при простой работе с файлми ты вынужден делать много телодвижений сам. Как вообще ты собрался обмениваться данными через файлы? Я вижу это так: в обоих процессах ты откраваешь один и тот же файл. В первом процессе что-то туда пишеш. Если сразу же попробовать прочитать в другом процессе, то результат зависит от того были ли сброшены данные из виндового буфера на диск (а это зависит от многих факторов). Чтобы убедиться что запись в файл реально была, нужно вызвать FlushFileBuffers, что уже стопроцентно медленно. А в случае FileMapping винда может избежать этого обращения к диску (хотя где-то внутри и будет помнить, что когда-нибудь ей придется скинуть данные в файл). В общем юзай файлмаппинги -------------------- Обижено школьников: 8 |
|||
|
||||
| Micher |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
2 программы обмениваются просто. Первая пишет в один FileMapping, 2-я во 2-й. Первая читает из 2-ого и наоборот. Ну и там какие то операции совершают в зависимости от данных
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |