代码之家  ›  专栏  ›  技术社区  ›  sorin

如何在Windows下刷新磁盘读缓存?[复制品]

  •  9
  • sorin  · 技术社区  · 16 年前

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

    为了能够进行一些基准测试,我需要清理Windows磁盘 阅读 隐藏物。我该怎么做?

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

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

    3 回复  |  直到 11 年前
        1
  •  3
  •   Jeff Grills    14 年前

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

        2
  •  3
  •   Community Mohan Dere    9 年前

    阿法克,不幸的是不可能 丢弃 这个 阅读 在Windows下缓存。 几年前我花了一些时间研究这个问题,结果发现 脸红 这个 写 隐藏物。

    如我所见,你有三个选择,除非有人发现了魔法:

    1. 如果可能,在无缓冲模式下读取文件I/O。
    2. 每次您想要进行基准测试时,创建一个新的测试数据副本,在创建新副本时指定非缓冲模式(此 应该 把拷贝放在读缓存之外,但我还没有测试过)。
    3. 分配足够的内存,Windows必须放弃磁盘缓存(ugh!).

    编辑:确实可以刷新读缓存,至少在Vista和更高版本上是这样: Disable or flush page cache on Windows . 它需要打电话给无证件的人 NtSetSystemInformation 不过,NT API。此外,对于单个文件,只需打开文件 FILE_FLAG_NO_BUFFERING 指定并再次关闭句柄。

        3
  •  2
  •   sorin    16 年前

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