【问题标题】:How to flush the disk read cache under Windows? [duplicate]Windows下如何刷新磁盘读缓存? [复制]
【发布时间】:2011-04-04 04:51:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您要查找的内容也称为“删除缓存”。在 Linux 下,您可以通过写信给/proc/sys/vm/drop_caches 来完成。虽然不知道 Windows ...
  • @Mehrdad 你确实意识到这个问题是从 2010 年开始的,而那个问题是从 2011 年开始的?
  • @Jack:是的,抱歉,我确实做到了,但与此同时,我已经在几个月前的另一个问题上发布了这个问题的答案......所以这个问题应该被关闭作为这个的欺骗,或者相反。我决定选择后者,因为我在谷歌上看到了这个问题的 份副本(很多来自 2010 年),并且认为将它们全部标记为这比试图在 StackOverflow 上找到这个问题的最早副本(有很多)。 :\对不起..
  • @Mehrdad 我认为官方正确的程序是留下 "best" 问题并将其他问题标记为欺骗。老实说,我并没有真正通读或比较两者以查看哪个“更好”
  • @Jack:我觉得这样说有点奇怪,因为我是回答这个问题的人,但我真的认为我的答案是唯一真正有效的答案......我看了所有other questions 和 answers 但没有一个像我的那样方便(并且没有警告)。 :\ 这就是为什么我将这些标记为骗子。

标签: windows caching


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    AFAIK,很遗憾,在 Windows 下,discard read 缓存是不可能的。 几年前我花了一些时间研究这个问题,并且只知道如何刷新 写入缓存。

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

    1. 如果可能,请在无缓冲模式下执行读取文件 I/O。
    2. 每次您要进行基准测试时,创建新副本时指定无缓冲模式的测试数据的新副本(这应该将副本保持在读取缓存之外,但我尚未测试)。
    3. 分配足够的内存,Windows 必须丢弃磁盘缓存(啊!)。

    编辑:确实可以刷新读取缓存,至少在 Vista 和更高版本上:Disable or flush page cache on Windows。不过,它需要调用未记录的NtSetSystemInformation NT API。此外,对于单个文件,只需打开指定FILE_FLAG_NO_BUFFERING 的文件并再次关闭句柄即可刷新读取缓存。

    【讨论】:

    • 请注意,来自 Sron Sbarnea 的答案的程序 flushmem 实现了解决方案 3。它可以工作,但分配这么多内存显然很慢(可能是因为它会导致大量分页/交换)。跨度>
    • @sleske:是的,这不是一个很好的解决方案——它强制 Windows 修剪所有进程的工作集,进行换页以交换……然后通常会立即出现分页活动。
    • Note that the program flushmem from Sron Sbarnea's answer implements solution 3. It works, but allocating that much memory is apparently quite slow (probably because it causes a lot of paging/swapping). 更不用说它可能会崩溃。我运行了它,Chrome(包括这个页面)就消失了。嗬!幸运的是,当我运行 Chrome 时,它​​让我恢复了会话,所以这只是一个小不便;尽管如此,为了安全起见,您应该在使用它之前退出所有内容(这当然使它成为一个糟糕的解决方案)。 :-/
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-10
      • 2010-09-15
      • 2010-09-12
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2017-06-17
      相关资源
      最近更新 更多