【发布时间】:2012-01-01 18:25:58
【问题描述】:
(这不是我的计划,但我会尽我所能提供所有相关信息。)
有一个程序可以读取大约 300MB 大小的二进制文件,对其进行处理并输出一些信息。该程序使用 ifstream 进行文件输入,并且每次读取都会正确初始化和关闭流。
程序必须多次读取每个文件。第一次读取一个文件大约需要 3 秒,每次连续读取大约需要 0.1 秒。如果处理了多个文件,返回到第一个文件仍然会产生较快的读取速度,但一段时间后重新读取文件会变慢。
另外,如果一个文件被复制到另一个位置,新文件的第一次读取速度大约是 0.1 秒。
如果你算一下,连续读取的速度大致就是硬盘的宣传速度。
所有这些看起来文件位置都由操作系统或硬盘驱动器缓存,因此在连续读取时您不必寻找文件位置。
有谁知道导致初始读取速度变慢的确切原因,是否可以防止?三秒钟可能看起来不多,但它们会增加大约 5 个小时来正确处理每个文件所需的总时间。
此外,该程序在 Fedora 14 和 Scientific Linux 上运行,两个操作系统都有其默认文件系统。
任何想法都将不胜感激。
【问题讨论】:
-
3 秒读取一个 300MB 的文件对于访问磁盘来说是正确的 - 即 100MB/s,这是您可以从现代、快速的硬盘中获得的最高速度。读取 300MB 文件的 0.1 秒不是从磁盘中取出的——而是从缓存中取出的。