我认为Windows与Linux的页面缓存有类似的概念,用于存储来自磁盘的内存数据,如文件,可执行文件和动态库。我想知道是否有可能禁用这样的缓存或至少清除/清除它。
答案 0 :(得分:14)
这在windows下称为待机列表。您可以全局清除它,也可以清除一个卷或一个文件句柄。
<强>全球强>
您可以使用Microsoft Technet中的readily available program选择Empty
→Empty Standby List
以编程方式,您可以使用未记录的NtSetSystemInformation
函数实现相同的功能,有关详细信息,请参阅程序中的line 239,该程序与前面提到的相同,除其他外。
对于一个文件句柄
使用FILE_FLAG_NO_BUFFERING
打开文件:文档正在说明你打开文件而不进行缓冲,但所有Windows版本从Windows 98到Windows 8的真实,可观察行为就是它只是丢弃该文件的完整缓存内容(适用于所有人!),并且不会从使用此句柄的读取中重新填充缓存。
完整卷
卷句柄只是一个文件句柄(有点特别,但仍然如此),因此假设您有适当的权限来打开卷句柄,您可以对完整的卷执行相同的操作。
另外,正如Mehrdad的回答here所指出的,似乎有一个功能/错误(功能错误?),它允许您在没有适当的权限的情况下使卷的缓存无效,仅仅通过注意打开它共享写入,至少在一个最新版本的Windows下 当任何对写入有效的打开成功,因为你可以改变文件系统内部数据这样做(这是一个功能)时,这是完全合理的,但显然它也可以在打开卷失败时(这是一个错误)