我正在编写一个类似 emule 的软件,它可以在我的 Windows XP 32 位上运行。但是,有些用户向我反映,在 Win7 64 位上下载大文件(大于 2GB 或更大)时,系统内存会耗尽,尤其是与 Avast!(杀毒软件)一起运行时。我使用进程监视器观察 avast! 的行为,发现 avast 继续读取下载文件。(由于软件预先分配文件空间,下载并写入固定大小的文件可能会像病毒一样)
这种情况与下面文章描述的类似,即 FileSystem Cache 耗尽了物理内存。
http://blogs.msdn.com/b/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic-cache-service.aspx http://blogs.msdn.com/b/ntdebugging/archive/2007 /11/27/too-much-cache.aspx
我尝试了一些方法,一种是使用 FILE_FLAG_NO_BUFFERING 标志和 CreateFile API 进行读写,这样可以避免使用系统文件缓存,并且即使 Avast 系统文件缓存也会停止增长!仍在扫描下载的文件。
通过我解决了问题,我仍然不明白为什么 Avast!当我使用 NO_BUFFERING 模式读取和写入文件时,不会再耗尽内存。