windows - 在 Windows 上禁用或刷新页面缓存

标签 windows caching disk

我假设 Windows 具有与 Linux 的页面缓存类似的概念,用于将来自磁盘的数据(如文件、可执行文件和动态库)存储在内存中。我想知道是否有可能完全禁用此类缓存或至少清除/刷新它。

最佳答案

这在windows下叫做Standby List。您可以全局清除它,也可以为一个卷或一个文件句柄清除它。

全局
您可以使用 readily available program 来做到这一点来自 Microsoft Technet,通过选择 EmptyEmpty Standby List

以编程方式,您可以使用未记录的 NtSetSystemInformation 函数实现相同的目的,有关详细信息,请参阅 line 239在一个程序中,该程序与前面提到的程序执行相同的操作。

对于一个文件句柄
使用 FILE_FLAG_NO_BUFFERING 打开文件:文档说的是打开文件时没有缓冲,但在 Windows 98 以上的所有 Windows 版本上都是真实的、可观察到的行为与 Windows 8 不同的是,它只是丢弃该文件的完整缓存内容(对每个人而言!),并且不会从使用此句柄的读取中重新填充缓存。

一整卷
卷句柄只是一个文件句柄(有点特殊,但仍然如此),因此假设您有适当的权限来打开卷句柄,您可以对整个卷执行相同的操作。

此外,正如答案 here 中指出的那样,似乎有一个功能/错误(功能错误?),即使没有适当的权限,您也可以仅通过尝试在没有共享写入的情况下打开它来使卷的缓存无效,至少在一个最新版本的 Windows 下是这样。
当任何对写入有效的打开成功时发生这种情况是完全合理的,因为您可以这样做更改文件系统内部数据(到目前为止它是一个功能),但显然它在打开卷失败时也有效(这是一个错误) .

关于windows - 在 Windows 上禁用或刷新页面缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22666042/

相关文章:

windows - 如何以与 "cmd/c <command>".execute() 相同的方式从 groovy 运行 PowerShell 命令?

windows - 在Windows的Bash上运行Elasticsearch 1.7.1的问题

php - 页面重新加载但未到达服务器

java - overflowToDisk 如何在 ehcache 中工作?

ruby-on-rails - Rails 3 和 Memcached - 智能缓存,永不过期

algorithm - 用于可变长度记录存储和仅在主键上搜索的磁盘上查找的数据结构/算法

c - 我一次可以打开多少个文件?

ios - 如何找到运行我的应用程序的设备的总磁盘大小?

windows - 如何使用批处理文件从系统配置中删除环境变量

windows - 运行gcc失败:在Windows Golang中退出状态1