Windows NT是缓存还是刷新INI文件?

时间:2012-06-06 10:23:28

标签: windows winapi caching flush ini

我正在更新一个相当旧的应用程序。它使用了围绕代码的INI文件访问,在这里和那里创建和释放INI访问类实例。

我想将它集中到几个单独的实例,每个使用的文件一个。 因此,我们将摆脱在任何地方创建/释放复制粘贴的实例,并且可以自由地完全替换这些类,将决定从INI切换到其他设置存储。

是否应该调用WritePrivateProfileString(NULL,NULL,NULL ...)来应用更改? 假使,假设: 1)访问直接进入真正的INI文件,而不是注册表映射的文件。 2)操作系统属于NT系列(可能很少使用Win2000,很可能是WinXP及更高版本)。 Win9x / ReactOS / WinE / Odin /等不关心。

那么,我们现在应该明确地清除ini储蓄吗?

NT不会缓存注册表项写入,现在不需要regFlushKey。 但是INI文件呢?

关于WritePrivateProfileString的MSDN页面仅描述了Win9x和NT File-to-Reg映射的刷新技术。它对真正的INI文件保持沉默。

1 个答案:

答案 0 :(得分: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刷新其缓存。

这也与Windows 3.1中API的使用一致,您不需要刷新任何内容。 Windows不太可能从根本上改变API的使用。

要仔细检查,我在运行Process Monitor时拨打了WritePrivateProfileString。正如所料,Windows打开INI文件,更新它并再次关闭它。

不需要冲洗。