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

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

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

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

echo 3 > /proc/sys/vm/drop_caches

在 Windows 上,这个命令的等效项是什么?

答案1

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

然而,在做了进一步的研究和测试后,似乎即使是 SysInternals 的同步工具也没有真正清除 Windows 用于缓存文件和数据的内存 - 也就是所谓的文件系统缓存,Windows 称之为待机内存. 可以使用以下方法演示内存地图,另一个 SysInternals 工具,用于监视 Windows 中所有内存分配。

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

不过,我确实发现了一种有效的编程方法来清除 Windows 的待机列表,其形式是空待机列表,来自 Wen Jia Liu 的一个简单命令行程序:

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

  • 进程工作集
  • 修改后的页面列表
  • 备用列表(优先级 0 至 7)
  • 仅限优先级 0 候补列表

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

CMD

EmptyStandbyList.exe

并且bash

cmd \/c EmptyStandbyList.exe

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

跑步前EmptyStandbyList.exe

在此处输入图片描述

跑步后EmptyStandbyList.exe

在此处输入图片描述

答案2

Windows 中没有内置等效命令。不过微软免费提供同步命令,它会按照您的要求将未写入的数据刷新到磁盘。它是 SysInternals 工具套件的一部分。

这是描述作者的话:

UNIX 提供了一个名为 Sync 的标准实用程序,它可用于指示操作系统将所有文件系统数据刷新到磁盘,以确保其稳定,并且在系统发生故障时不会丢失。否则,缓存中存在的任何修改数据都将丢失。这是我编写的等效程序,称为 Sync,适用于所有版本的 Windows。每当您想知道修改的文件数据是否安全地存储在硬盘上时,都可以使用它。

您需要管理权限才能运行该命令。要刷新全部磁盘,只需运行:

sync

如果您只想定位单个驱动器,例如C:使用:

sync c:

您还可以使用以下命令仅刷新可移动驱动器:

sync -r

此实用程序适用于 Vista/Server 2008 及更高版本的所有 Windows 版本。

相关内容