如何清除 Windows 中的驱动器缓存?

如何清除 Windows 中的驱动器缓存?

我正在开发一个 I/O 绑定应用程序,并试图追踪从慢速移动驱动器读取时发生的错误。追踪此 Heisenbug 的问题是某些东西(驱动器或 Windows 本身)将读取缓存在 RAM 中的某个地方(在驱动器内置缓存中,或在操作系统中的某个地方)。

为了发现软件中的错误,我必须重新启动系统(在虚拟机内运行有同样的性能问题 - 我读取数据一次,但最终它会被缓存在某个地方。)

有没有办法清除这些缓存(无论是在操作系统中还是驱动器本身中)?

答案1

你可以清除 Windows StandbyList/Cache通过调用 Windows API 调用系统信息设置

stackoverflow 有人发布了不同的 hack清理系统缓存,也许这就是您所需要的。

答案2

您是否在使用 Win32 IO 调用?如果是,请FILE_FLAG_NOBUFFERING在调用时使用该选项CreateFile。然后所有ReadFileWriteFile调用都将直接进入硬件,而无需在操作系统中进行缓冲或缓存。限制:通过该文件句柄进行的读写调用必须是块大小的倍数,并且文件中的偏移量也必须是块大小的倍数。

据我所知,这不会停止驱动器硬件上的缓存。

相关内容