2012-06-06 7 views
2

Я обновляю довольно старое приложение. Он использовал INI-файл для доступа ко всему окну, создавая и освобождая INI-доступ к экземплярам класса здесь и там.Является ли Windows NT кэшем или скрывает записи INI-файлов?

Я хочу централизовать это несколько экземпляров, по одному на используемый файл. Таким образом, мы избавлялись бы от экземпляров, создающих/освобождающих всюду копируемую копию, и имели бы свободу полностью заменить эти классы, было бы решение переключиться с INI на другое хранилище настроек.

Следует ли использовать WritePrivateProfileString (NULL, NULL, NULL ...) для применения изменений? Предположим, что: 1) доступ идет непосредственно к реальным INI-файлам, а не к отображаемым в реестре. 2) ОС семейства NT (возможно, редко Win2000, скорее всего WinXP и позже). Win9x/ReactOS/WinE/Odin/etc не заботятся.

Итак, нужно ли мы спрятать сбережения ini прямо сейчас или нет?

NT не кэширует запись в реестре, теперь не нужно regFlushKey. Но как насчет файлов INI?

Страница MSDN о WritePrivateProfileString описывает только технологию промывки по файлам Win9x и NT File-to-Reg. Он молчит о реальных файлах INI.

ответ

2

документация противоречит сам себе (мой жирный шрифт):

Система хранит кэшированные версии самого последнего отображения файла реестра для повышения производительности. Если все параметры равны NULL, функция очищает кеш. Пока система редактирует кеш-версию файла, процессы, которые отредактируют сам файл, будут использовать исходный файл до тех пор, пока кеш не будет очищен.

Является ли Windows кэшированием отображения или файла (какого файла)? Но комментарий в коде примера становится ясно:

// Force the system to read the mapping into shared memory 
// so that future invocations of the application will see it 
// without the user having to reboot the system 

Это файл реестра отображение, что кэшируется. Если вы измените отображение в реестре, вам нужно сообщить Windows, чтобы обновить его кеш.

Это также согласуется с использованием API в Windows 3.1, где вам не нужно ничего смывать. Маловероятно, что Windows существенно изменит использование API.

Чтобы выполнить двойную проверку, я позвонил WritePrivateProfileString во время работы Process Monitor. Как и ожидалось, Windows открывает файл INI, обновляет его и снова закрывает.

Не требуется промывка.

+1

В Windows NT реестр состоит из нескольких физических файлов. –

+0

Да, я надеюсь, что он изменился в NT так же, как в реестре. ProcMon - хороший намек, но он не доказывает. Просто потому, что мы имитируем однозадачную среду, и если диск Windows не занят, он очистит кеш, а почему бы и нет. Но что, если несколько потоков/программ обновили один и тот же файл? Что делать, если программа сильно разбилась? –

+0

Лично я читал это место как «окна сбрасывает содержимое (только написанные значения) виртуального ini-файла в базовый реальный конец хранилища реестра» –