如何强制Windows清除所有磁盘读取缓存数据?

Ste*_*nov 6 windows winapi

可能重复:
如何使文件系统缓存无效?

我正在编写磁盘密集型win32程序.它第一次运行时,使用FindFirstFile()/ FindNextFile()扫描用户的文件夹时运行速度慢很多.

如何在不重新启动的情况下重复此第一次性能?有没有办法强制系统丢弃其磁盘缓存中的所有内容?

我知道如果我正在读取单个文件,我可以通过将FILE_FLAG_NO_BUFFERING标志传递给CreateFile()调用来禁用缓存.但是在搜索文件时似乎不可能这样做.

Ste*_*nov 0

我尝试了答案中的所有方法,包括 CacheSet,但它们不适用于 FindFirstFile/FindNextfile()。这是有效的:

  • 通过网络扫描文件。扫描共享驱动器时,Windows似乎没有缓存文件夹,因此每次都很慢。

  • 使任何算法变慢的最简单方法是插入对 Sleep() 的调用。这可以揭示多线程代码中的许多问题,而这正是我真正想要做的。