如何刷新Windows下的磁盘读取缓存?

时间:2010-08-26 10:21:53

标签: windows caching

  

可能重复:
  How to invalidate the file system cache?

为了能够进行一些基准测试,我需要清理Windows磁盘读取缓存。我怎么能这样做?

实际上我想比较一下从磁盘加载一个大的Unicode文件(UTF-8或UTF-16)是否更快,考虑到在内存中我确实保留了UTF-16。

我知道它应该没有显着差异但是为了对其进行基准测试我需要确保该文件没有被缓存 - 我需要查看磁盘上的大小是否比解码文件具有更多或更少的影响。

3 个答案:

答案 0 :(得分:3)

AFAIK,遗憾的是,在Windows下丢弃读取缓存是不可能的。几年前我花了一些时间研究这个问题,才发现如何刷新 缓存。

在我看来,你有三个选择,除非其他人找到了一些魔法:

  1. 如果可能,请以无缓冲模式读取文件I / O.
  2. 每次要进行基准测试时,在创建新副本时创建指定无缓冲模式的测试数据的新副本(此将副本保留在读取缓存中,但我尚未测试)。
  3. 分配足够的内存,Windows必须丢弃磁盘缓存(呃!)。
  4. 编辑:确实可以刷新读取缓存,至少在Vista和更高版本上是Disable or flush page cache on Windows。但是,它需要调用未记录的NtSetSystemInformation NT API。此外,对于单个文件,只需打开指定了FILE_FLAG_NO_BUFFERING的文件并再次关闭句柄即可刷新读取缓存。

答案 1 :(得分:3)

几年前微软的某个人帮我解决了这个问题(早在Windows XP时代),并给了我一个满足我当时需求的解决方案。我已经在我的机器上安装了两个驱动器,我需要测试的是D驱动器,幸运的是,当我想清理缓存时,我不需要在D驱动器上打开任何文件。从Windows磁盘管理界面,我可以将我的D:驱动器盘符更改为另一个字母,然后再返回,D驱动器将像操作系统中的冷缓存一样运行。

答案 2 :(得分:2)

到目前为止,我找到的唯一解决方案是http://chadaustin.me/2009/04/flushing-disk-cache/,但这些解决方案需要花费太多时间,所以我希望我们能找到更好的解决方案。