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

red*_*bit 10 windows caching disk

我假设Windows与Linux的页面缓存有类似的概念,用于存储来自磁盘的内存数据,如文件,可执行文件和动态库.我想知道是否有可能禁用这样的缓存或至少清除/清除它.

Dam*_*mon 16

这称为Windows下的待机列表.您可以全局清除它,也可以清除一个卷或一个文件句柄.

全局
您可以使用Microsoft Technet中的现成程序,通过选择Empty→来完成此操作Empty Standby List

在编程方面,您可以使用未记录的NtSetSystemInformation函数实现相同的功能,有关详细信息,请参阅程序中的第239行,该程序与前面提到的功能相同,其中包括.

对于一个文件句柄
打开文件FILE_FLAG_NO_BUFFERING:文档说谎,因为它说没有缓冲打开文件,但从Windows 98到Windows 8的所有Windows版本的真实,可观察的行为是它只是抛弃完整缓存该文件的内容(适用于所有人!),并且不会从使用此句柄的读取中重新填充缓存.

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

另外,正如Mehrdad 在这里的回答所指出的那样,似乎有一个功能/错误(功能错误?),它允许你在没有适当的权限的情况下使一个卷的缓存无效,只需要在没有共享写入的情况下注册打开它,至少在一个最新版本的Windows.
当任何对写入有效的打开成功,因为你可以改变文件系统内部数据这样做(这是一个功能)时,这是完全合理的,但显然它也可以在打开卷失败时(这是一个错误) .