如何在Windows下刷新磁盘读caching?

可能重复:
如何使文件系统caching失效?

为了能够这样做一些基准,我需要清理Windows磁盘读取caching。 我怎样才能做到这一点?

实际上,我想比较一下,如果从磁盘加载大的Unicode文件(UTF-8或UTF-16)速度较快,考虑到在内存中我保持UTF-16。

我知道它应该没有什么重大区别,但为了进行基准testing,我需要确保该文件没有被caching – 我需要看看磁盘上的大小是否比解码文件有更多或更less的影响。

Solutions Collecting From Web of "如何在Windows下刷新磁盘读caching?"

微软的某个人几年前(在Windows XP的时代)帮助我解决了这个问题,并给了我一个满足我需求的解决方案。 我的机器中已经有两个驱动器,我需要测试的东西已经放在D盘上,幸运的是,当我想要刷新缓存时,我不需要在D盘上保留任何文件。 从Windows磁盘管理界面,我可以将我的D:驱动器号改为另一个字母,然后再回来,D驱动器就会像操作系统中有一个冷藏缓存一样执行。

AFAIK,不幸的是不能放弃 Windows下的读取缓存。 几年前,我花了一些时间来研究这个,只发现了如何刷新 写入缓存。

正如我所看到的,你有三种选择,除非别人找到了一些魔法:

  1. 如果可能,请以非缓冲模式读取文件I / O。
  2. 每次你想进行基准测试的时候,创建一个新的测试数据副本,在创建新副本的时候指定非缓冲模式(这应该使副本超出读缓存,但是我没有测试过)。
  3. 分配足够的内存,Windows必须放弃磁盘缓存(呃!)。

编辑:至少在Vista和更高版本上刷新读缓存确实是可能的: 在Windows上禁用或刷新页面缓存 。 不过,它需要调用未记录的NtSetSystemInformation NT API。 另外,对于单个文件,只需通过指定FILE_FLAG_NO_BUFFERING打开文件并再次关闭句柄即可刷新读取缓存。