我假设Windows与Linux的页面缓存具有类似的概念,用于存储来自磁盘的内存数据,如文件、可执行文件和动态库。我想知道是否有可能禁用这类缓存,或者至少清除/刷新它。
发布于 2014-04-15 13:23:12
这称为窗口下的待机列表。您可以在全局范围内清除它,也可以为一个卷或一个文件句柄清除它。
全局
通过选择现成程序 Empty→Empty Standby List,您可以使用Microsoft Technet的Empty→Empty Standby List来完成这一任务。
在编程上,您可以使用无文档的NtSetSystemInformation函数实现相同的功能,有关详细信息,请参阅程序中的第239行,该程序与前面提到的相同,以及其他内容。
用于一个文件句柄
用FILE_FLAG_NO_BUFFERING打开文件:文档说你打开文件时不需要缓冲,但从Windows 98到Windows 8的所有版本上真正的、可观察的行为是,它只是丢弃了该文件的全部缓存内容(对每个人来说!)并且不会从使用此句柄的读取中重新填充缓存。
为一个完整的卷
卷句柄只是一个文件句柄(有点特殊,但仍然如此),因此假设您拥有打开卷句柄的适当权限,则可以对完整卷进行同样的操作。
此外,正如在答案这里中指出的,似乎存在一个特性/bug(feature?)它允许您在没有适当权限的情况下使卷的缓存失效,只需在没有共享写入的情况下就打开卷缓存,至少在最近的Windows版本下是如此。
当任何对写入有效的打开都成功时,这是完全合理的,因为您可能会更改文件系统--内部数据(就其特性而言),但显然,当打开卷失败时(这是一个错误),它也能工作。
https://stackoverflow.com/questions/22666042
复制相似问题