![映射文件的内存使用情况(Win7 64位)](https://linux22.com/image/1329070/%E6%98%A0%E5%B0%84%E6%96%87%E4%BB%B6%E7%9A%84%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%EF%BC%88Win7%2064%E4%BD%8D%EF%BC%89.png)
在 Win7 中从/向我的外部 USB3 HDD 复制文件时,内存使用率会上升到 100% 并保持在该水平。我不确定这是否是由错误的驱动程序引起的问题,但我已经拥有它们的最新版本(Gigabyte 990fxa 主板上的 Etron USB3 控制器)。
使用内存地图很明显,要复制的文件已映射到内存中。单击
Empty > Empty System Working Set
似乎可以暂时解决问题(不会对文件复制过程造成任何问题),但需要每隔几秒钟执行一次。有没有办法安排此操作每 10 秒左右自行执行一次?RAMMap 使用什么底层系统命令?或者,有没有办法限制 Windows 7 中映射文件可以使用的 RAM 量?
我知道如果其他程序需要内存,映射文件通常会从内存中删除,但是当内存使用率达到 100% 时,每次我单击任何内容时系统都会开始冻结半秒钟左右...因此,自动删除未使用的内存内容似乎在这里失败了。
答案1
我想这是一个复杂的问题。问题的一部分肯定是驱动程序,但其他部分是 SyncToy/robocopy 和 Truecrypt(USB3 驱动器已加密)——仅使用 Ctrl+C/V 复制文件时不会出现此问题。RAM 仍然被 Truecrypt 容器的映射文件填满,但使用情况不会显示在任务管理器中(仅在 RAMMAP 中),并且系统不会冻结。
因此,MS、Etron/Gigabyte 和 Truecrypt 人员可能都应对此承担部分责任。
无论如何,经过多年的痛苦,我终于找到了一个简单的解决方案,感谢这个其他超级用户线程关于 Windows 的文件缓存问题,导致此问题讨论在 Sysinternals 论坛上,最终导致有人创建了一个工具(“SetSystemFileCacheSize”)本质上只是调用 Windows API 来结束这场噩梦。(...Windows 的运行与预期一致@billc.cn)
使用方法相当简单:SetSystemFileCacheSize off 2048
为我解决了这个问题。第一个参数是缓存的下限,第二个参数是缓存大小的上限。根据内存大小,其他值可能更有意义 - 请参阅链接了解更多详细信息。对于超过 4G 的值,还有一个 x64 版本。