清除文件缓存以重复性能测试

Ste*_*nne 102 performance caching file disk

我可以使用哪些工具或技术来删除缓存的文件内容,以防止我的性能结果出现偏差?我相信我需要完全清除或有选择地删除有关文件和目录内容的缓存信息.

我正在开发的应用程序是一个专门的压缩实用程序,并且预计会做很多工作来读取和编写操作系统最近没有触及的文件,并且其磁盘块不太可能被缓存.

当我重复分析执行文件处理工作的不同策略的任务时,我希望消除IO时间中看到的可变性.

我主要对Windows XP的解决方案感兴趣,因为那是我的主要开发机器,但我也可以使用linux进行测试,所以我也对这个环境的答案感兴趣.

我尝试了SysInternals CacheSet,但是在重新读取我刚读过几次的文件时,单击"清除"不会导致可测量的增加(在冷启动后恢复到计时).

小智 80

使用SysInternalRAMMap应用程序.

rammap空待机

Empty/Empty Standby List菜单选项将清除Windows文件缓存.

  • 对于程序化方法,请参阅此SO帖子:http://stackoverflow.com/a/23085045/430360 (3认同)
  • RAMMap不能在Windows XP上运行.这些菜单选项是否与SysInternals Cacheset应用程序中的"清除"按钮有所不同? (2认同)
  • 单击空待机列表后,按F5刷新文件列表 (2认同)

小智 15

对于Windows XP,您应该能够通过使用带有FILE_FLAG_NO_BUFFERING选项的CreateFile打开文件然后关闭句柄来清除特定文件的缓存.这没有记录,我不知道它是否适用于更高版本的Windows,但我很久以前在编写测试代码来比较文件压缩库时使用了它.我不记得读或写访问是否影响了这个技巧.

  • 所以必须重复*每个文件*?因此,例如,如果您复制一个包含100MB分布在10个子目录中的30个文件的目录,则必须分别打开每个目录以确保您读取实际磁盘而不是缓存? (2认同)

Joh*_*son 14

快速的Google搜索为Linux提供了这些选项

  1. 卸载并装入包含文件的分区
  2. sync && echo 1 > /proc/sys/vm/drop_caches

  • 谢谢,这看起来非常有用,虽然我可能想要回应3而不是1.我主要对Windows XP感兴趣,这就是为什么我在google搜索中没有找到它. (2认同)

Edw*_*rlo 8

命令行实用程序可以在这里找到

从来源:

EmptyStandbyList.exe 是Windows(Vista及更高版本)的命令行工具,可以清空:

  • 处理工作集,
  • 修改后的页面列表,
  • 备用列表(优先级0到7),或
  • 仅优先级为0的备用列表。

用法:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
Run Code Online (Sandbox Code Playgroud)

  • 在所有噪音中被高度低估的答案,简单的实用程序可以完成一项工作并且做得很好。您可能应该在答案中包含更多详细信息,以获得您应得的投票。 (4认同)