我有一个用 C++ 编写的应用程序,Visual Studio 2005 专门在 Windows XP 中运行。当应用程序启动时,它会读取大量 (> 20000) 包含 XML 的文本文件 (.nfo)。每个文件为 800 字节。
冷重启后启动应用程序时,读取文件需要 10 分钟。但是,如果我关闭它并重新启动它,只需 10 秒即可读取它们。如果我进行热重启,也需要 10 秒。如果我使用 cacheset 实用程序清除缓存,读取文件也需要 10 秒。如果我冷重启电脑,2小时内不要触摸电脑,启动应用程序,仍然需要10分钟才能启动。
我使用标准库(std)中的基本函数来打开/读取/关闭文件。
我相信问题不直接来自应用程序的实现,而是来自 Windows XP。
我目前的重点是 Windows XP 的 Prefetcher。我的应用程序有一个位于预取目录中的 .pf 文件。但是,我的 .nfo 文本文件都没有位于要预取的文件列表中。例如,在与 Internet Explorer 关联的预取文件中,可以看到其图片等临时文件都列在了预取文件中。我相信如果我可以强制我的文件出现在该列表中;对它们的打开/读取操作会更快,因为 Windows 已经知道它们在磁盘上的位置。
为什么我的文件没有与我的 DLL 一起位于 .pf 预取文件中?文件出现在预取文件中的条件是什么?
这有意义吗?
我还想知道是否有办法强制 Windows XP 预先获取完整目录或文件列表?
这是与计算机一起销售的已经商业化的产品。因此,我们拥有调整操作系统的完全权限。但是,我们不打算对我们的应用程序进行极端更改。
问候