【发布时间】:2010-12-02 10:07:10
【问题描述】:
我有一个 C++ 程序,它从硬盘读取文件并对文件中的数据进行一些处理。我正在使用标准 Win32 API 来读取文件。我的问题是这个程序有时非常快,然后突然减慢到之前速度的 1/6。如果我在多次运行中一次又一次地读取相同的文件,那么通常第一次运行将是最慢的。然后它会保持速度,直到我读取其他一些文件集。所以我的明显猜测是分析磁盘访问时间。我使用了 perfmon 实用程序并测量了我的程序的 IO Read Bytes/sec。正如预期的那样,读取的字节数存在巨大差异(约 5 倍)。我的问题是:
(1)。操作系统(在我的例子中是 Windows)是否将最近读取的文件缓存在某处,以便后续加载更快?
(2)。如果我可以保证我读取的所有文件都在同一个目录中,那么有什么方法可以将它们放在硬盘中,以便我的磁盘访问时间更快?
有什么我可以做的吗?
【问题讨论】:
-
您能否添加一些数字:您读取了多少数据 (MB),有多少可用 RAM 以及您的应用程序为数据使用了多少 RAM?您是在多次运行之间重新启动程序,还是只是在内部释放内存?
-
这种行为并不令人惊讶——尽管您需要阅读大量文件(或者内存非常有限)才能如此清楚地看到这种效果。迈克尔的回复很好地回答了它。
标签: c++ performance winapi disk