Windows XP在C++中启动时读取文本文件的速度较慢;预取
Windows XP slower to read text files at startup in C++; prefetch?
我有一个用C++编写的应用程序,Visual Studio 2005仅在Windows XP中运行。启动应用程序时,它会读取大量(>20000)包含XML的文本文件(.info)。每个文件为800字节。
当应用程序在冷重启后启动时,读取文件需要10分钟。然而,如果我关闭它并重新启动它,只需要10秒钟就可以阅读它们。如果我进行热重启,也需要10秒。如果我使用cacheset实用程序清除缓存,读取文件也需要10秒。如果我冷重启电脑,2小时内不要触摸电脑,启动应用程序,仍然需要10分钟才能启动。
我使用标准库(std)中的基本函数来打开/读取/关闭文件。
我相信问题不是直接来自应用程序的实现,而是来自Windows XP。
我目前关注的是WindowsXP的预取器。我的应用程序在预取目录中有一个.pf文件。但是,我的.info文本文件都不在要预取的文件列表中。例如,在与Internet Explorer关联的预取文件中,您可以看到其临时文件(如图片)列在预取文件内。我相信,如果我能强迫我的文件出现在该列表中;对它们的打开/读取操作会更快,因为Windows已经知道它们在哪里了定位在磁盘上。
为什么我的文件没有和我的DLL一起位于.pf预取文件中?文件出现在预取文件中的条件是什么?
这有道理吗?
我还想知道是否有一种方法可以强制Windows XP预取完整的目录或文件列表?
这是一种已经商业化的产品,与电脑一起销售。因此,我们完全可以调整操作系统。然而,我们不打算对我们的申请进行极端的修改。
问候
IMO,如果您在启动时读取了>20000个文件,那么这肯定是应用程序的问题
为什么有人更喜欢调整操作系统而不是真正修复他们的应用程序,我无法理解。
如果超过20000个文件需要10分钟,那么您将看到<每个文件30毫秒,这对于旋转磁盘来说并不是很糟糕,尤其是如果您使用的是标准C++文件例程,IIRC有相当大的开销。
当需要10秒(每个文件0.5毫秒)时,这是因为文件已经在系统磁盘缓存中。
即使你让它工作,预取也不会神奇地让事情变得更快;操作系统仍然需要查找、打开、读取和关闭>20000个文件,将以分钟为顺序进行。
提高加载时间的最佳方法是将文件捆绑在一起,并一次读取所有文件
为了最大限度地提高效率,请将它们保存在压缩档案中
或者使用固态硬盘。
- 为什么在读取文件大小时文件IO速度会发生变化
- 文件系统:复制功能的速度秘诀是什么
- 加快在C++中读取/处理日志文件的速度
- 如何提高文件的读取速度?
- C++二进制文件 I/O 操作速度变慢.数据库如何处理二进制文件?
- C++以尽可能快的速度逐行将字符串保存到文件中
- 实时更改音频文件的速度
- cl 生成的可执行文件在第一次运行时运行速度非常慢
- 如何以快速速度将二进制文件分为C 或Python的6字节块
- MF SinkWriter mp4文件的播放持续时间是添加音频样本时的一半,图像的播放速度也是添加音频样本的两倍
- 头文件是否会影响程序的内存或处理速度
- 优化.txt文件的创建速度
- 提升文件系统的速度慢得令人难以置信
- 为什么windows第一次打开文件的速度这么慢,有没有更快的方法
- 将数据保存在std :: vector或.txt文件中的速度更快
- 嵌套的lambda表达式在用Visual C++编译和生成巨大的对象文件时速度非常慢
- 头文件会减慢程序的速度
- C++-为什么标记化器从文件中读取行的速度如此之慢
- 以 C 和 C++ 最快的速度输出到文件
- 用于写入顺序日志文件以提高速度的 mmap