如何以编程方式清除 Windows 中的缓冲区和缓存

Has*_*ziz 5 windows cygwin bash cache buffer

我需要bash在 Cygwin 环境中对某些命令的速度进行基准测试,并确保我正在运行的测试不会命中 Windows 缓冲区或缓存。尽管我是在bash环境中进行基准测试,但我怀疑所有缓存都是由 Windows 本身完成的,而不是 Cygwin。

在基于Unix 的系统上,您可以执行以下操作来清除所有缓存和缓冲区:

echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

这个命令在 Windows 上的等价物是什么?

Has*_*ziz 5

Twisty 是正确的,Windows 中没有本机工具可以执行此操作。

然而,在进行一些进一步的研究和测试时,似乎即使是 SysInternals 的 Sync 工具实际上也没有清除 Windows 用于缓存文件和数据的内存 - 也称为文件系统缓存,Windows 称之为备用内存。这可以通过使用RAMMap来证明,这是另一个SysInternals工具,用于监视 Windows 中的所有内存分配。

在运行该Sync工具之前和之后检查 RAMMap 的 Standby Memory 列显示,Windows 的待机内存在运行之前和之后几乎保持不变Sync。事实上,Sync似乎对内存根本没有任何明显的影响,据我所知,这使得它对于性能测试的目的基本上没有用。

我确实发现了一种有效的编程方法来清除 Windows 的待机列表,但是,以EmptyStandbyList.exe的形式,这是一个来自 Wen Jia Liu 的简单命令行程序:

EmptyStandbyList.exe 是 Windows(Vista 及以上)的命令行工具,可以清空:

  • 流程工作集
  • 修改后的页面列表
  • 备用清单(优先级 0 到 7)
  • 仅优先级 0 备用列表

要使用它,您需要确保EmptyStandbyList.exe文件位于系统 PATH 环境变量中的某个位置,然后EmptyStandbyList.exe在需要刷新内存时从 shell 或脚本中调用。

CMD

EmptyStandbyList.exe
Run Code Online (Sandbox Code Playgroud)

并在bash

cmd \/c EmptyStandbyList.exe
Run Code Online (Sandbox Code Playgroud)

要确认执行后 Windows 的待机内存已成功清除,您可以再次使用 RAMMap。

跑步前 EmptyStandbyList.exe

在此处输入图片说明

运行后 EmptyStandbyList.exe

在此处输入图片说明