我认为Windows有一个类似于Linux的页面caching的概念,用于存储来自磁盘的数据,如文件,可执行文件和dynamic库。 我想知道是否有可能在所有的情况下禁用这种caching或至less清除/冲洗它。
这在windows下叫做Standby List 。 您可以全局清除,也可以清除一个卷或一个文件句柄。
在全球范围内
您可以使用Microsoft Technet 提供的随时可用的程序 ,通过选择Empty
→ Empty Standby List
以编程方式,您可以使用未记录的NtSetSystemInformation
函数实现相同的功能,详细信息请参阅程序中的第239行 ,该程序执行与前面提到的相同的功能。
对于一个文件句柄
使用FILE_FLAG_NO_BUFFERING
打开文件:文档说谎,因为它说你打开文件没有缓冲,但从Windows 98到Windows 8的所有Windows版本上的真实的,可观察到的行为是,它只是抛出了完整的缓存内容该文件(对于每个人!),并且不会从使用该句柄的读取中重新填充缓存。
一个完整的卷
一个卷处理只是一个文件句柄(有点特别的,但仍然),所以假设你有适当的特权来打开一个卷句柄,你可以做一个完整的卷。
同样,正如Mehrdad 在这里的回答中指出的那样,似乎有一个功能/缺陷(功能缺陷?),即使没有适当的权限,也可以使卷的缓存无效,仅仅通过在不共享写入的情况下打开它,至少在一个最新版本的Windows。
这是非常有意义的,当任何有效的写入打开成功,因为你可能会改变文件系统内部的数据(这是一个功能),但显然它也适用于打开卷失败(这是一个错误) 。