我有一个应用程序是用C++,Visual Studio 2005专门在Windows XP中运行的。 当应用程序启动时,它读取大量(> 20000)包含XML的文本文件(.nfo)。 每个文件是800bytes。Windows XP在C++启动时读取文本文件速度较慢;预取?
当应用程序在冷启动后启动时,需要10分钟才能读取文件。 但是,如果我关闭并重新启动它,则只需10秒即可读取它们。如果我进行热重启,它也需要10秒。 如果使用cacheset实用程序清除缓存,则需要10秒才能读取这些文件。 如果我冷启动电脑,请勿触摸电脑2小时,启动应用程序,启动仍需10分钟。
我使用标准库(std)的基本功能来打开/读取/关闭文件。
我相信问题不是直接来自应用程序的实现,而是来自Windows XP。
我当前的重点是Windows XP的Prefetcher。我的应用程序在预取目录中有一个.pf文件。 但是,我的.nfo文本文件没有位于要预取的文件列表中。 例如,在与Internet Explorer关联的预取文件中,可以看到它的临时文件(如图片)已列在预取文件中。 我相信如果我可以强制我的文件出现在列表中;对它们的打开/读取操作将会更快,因为Windows已经知道它们在磁盘上的位置 。
为什么我的文件与我的DLL一起位于.pf预取文件中? 文件出现在预取文件中的条件是什么?
这是否有意义?
我还想知道是否有办法强制Windows XP预取完整目录或文件列表?
这是已经商品化的产品,与电脑一起出售。因此,我们完全可以调整操作系统。 但是,我们并没有计划对我们的应用程序进行极端改动。
问候
应用程序如何启动?你是手动运行它还是启动组,注册表等的一部分?我不确定哪个版本的操作系统,但有些“沙盒”启动程序有助于启动时间,因为许多供应商希望他们的程序同时启动。 – 2012-02-17 14:24:15
通常用户手动启动应用程序!我们正在自动启动,但我不明白它可以如何帮助.. – philouuuu 2012-02-17 14:31:07
从std的基本功能你的意思是ifstream对象?在处理大量文本时,普通C函数应该有更好的性能。 – Raven 2012-02-17 14:39:56