我可以使用哪些工具或技术来删除缓存的文件内容,以防止我的性能结果出现偏差?我相信我需要完全清除或有选择地删除有关文件和目录内容的缓存信息。
我正在开发的应用程序是一个专门的压缩实用程序,预计会做很多工作来读取和编写操作系统最近没有触及的文件,并且其磁盘块不太可能被缓存。 / p>
当我重复分析执行文件处理工作的不同策略的任务时,我希望消除IO时间内看到的可变性。
我主要对Windows XP的解决方案感兴趣,因为那是我的主要开发机器,但我也可以使用linux进行测试,因此我也对该环境的答案感兴趣。
我尝试了SysInternals CacheSet,但是在重新读取文件的时候点击“清除”并没有导致可测量的增加(在冷启动后恢复计时)我刚读了几个次。
答案 0 :(得分:80)
答案 1 :(得分:14)
快速的Google搜索为Linux提供了这些选项
sync && echo 1 > /proc/sys/vm/drop_caches
答案 2 :(得分:14)
对于Windows XP,您应该能够通过使用带有FILE_FLAG_NO_BUFFERING选项的CreateFile打开文件然后关闭句柄来清除特定文件的缓存。这没有记录,我不知道它是否适用于更高版本的Windows,但我很久以前在编写测试代码来比较文件压缩库时使用了它。我不记得读或写访问是否影响了这个技巧。
答案 3 :(得分:4)
可以找到命令行实用程序here
来自消息来源:
EmptyStandbyList.exe
是Windows的命令行工具(Vista和 以上)可以清空:
- 流程工作集,
- 修改后的页面列表,
- 备用列表(优先级0到7)或
- 仅限优先级0待机列表。
用法:
EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
答案 4 :(得分:3)
我发现了一种似乎有效的技术(重启除外):
虽然没有选择性。理想情况下,我希望能够清除用于缓存我不想再缓存的文件磁盘块的内存的特定部分。
答案 5 :(得分:3)
#include <fcntl.h>
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
使用建议选项POSIX_FADV_DONTNEED
:
在不久的将来不会访问指定的数据。
答案 6 :(得分:3)
为了更好地查看Windows XP文件系统缓存 - 尝试ATM by Tim Murgent - 它允许您在更详细和准确的视图中查看文件系统缓存工作集大小和待机列表大小。对于Windows XP - 您需要旧版本的ATM,可以下载here,因为V2和V3需要Server 2003,Vista或更高版本。
您将观察到虽然Sysinternals Cacheset将减少“Cache WS Min” - 但实际数据仍然以待机列表的形式继续存在,可以使用它直到被其他内容替换。要使用其他内容替换它,请使用MemAlloc或flushmem by Chad Austin或Windows Server 2003 Resource Kit Tools中的Consume.exe等工具。
答案 7 :(得分:0)
答案 8 :(得分:0)
有一个Windows API调用https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize,可用于刷新文件系统缓存。它也可以用于将缓存大小限制为非常小的值。看起来很适合这类测试。