对于性能测试,我需要一种方法来清除所有磁盘读取缓存,因为重新启动需要时间。清除 Windows 托管缓存清除操作系统缓存对我来说还不够。
我想测量游戏中加载声音文件的性能。
某个时刻,游戏会加载 4080 个文件,每个文件大小约为 30 KB。对于每个文件,游戏都会调用fopen
几次。最后一次成功,因此使用fseek
++读取整个文件,然后对文件进行-ed。ftell
fread
fclose
在 Windows 和 NTFS 中加载如此小的文件会产生大量开销。加载是在 12 个逻辑线程上的 12 个线程中完成的,但打开文件时存在互斥锁,并行化没有帮助,因为大多数工作都是由互斥锁序列化的。加载的资产总大小为 4 GB,适合我的 16 GB RAM。
我有两个 SSD:
- 加米克斯:Gammix S11 Pro 1 TB NVMe SSD,未加密
- 三星:三星 850 EVO 250 GB SATA SSD,带操作系统和 VeraCrypt 加密
测量顺序:
- 机器重启
- 游戏:19 秒
- 游戏:0.95 秒
- RamMap 清除缓存
- 游戏:2.1 秒
- 三星:18.7 秒
- 三星:1.0 秒
- RamMap 清除缓存
- 三星:3.17 秒
这些数字看起来相当稳定。
第二次运行是完全缓存的并从 RAM 进行,并且无论 SSD 如何都需要 1 秒。
第三次运行仅清除了操作系统缓存,因此应从 SSD 加载数据,分别需要 2 秒和 3 秒。
第一次运行是真正的冷场景,无论 SSD 如何,大约需要 20 秒。这是巨大的差异,原因未知,除了重启之外没有其他方法可以消除它。
答案1
简短回答:Windows 防病毒软件
我当时一直想着 SSD 本身的缓存,直到现在才决定检查其他可能性。显然,杀毒软件才是正确的想法。我用这种方式可以暂时禁用 Windows 防病毒软件。
以下是另一个测试序列:
- 机器重启
- 禁用防病毒软件
- 游戏:2.1 秒
- 启用防病毒软件
- RamMap 清除缓存
- 游戏:20.5 秒
我确认:
- 在两种情况下加载时间相同:全新启动并关闭防病毒软件后;清除 RamMap 后反复尝试;
- 只需禁用防病毒软件并立即重新启用它以清除其扫描缓存即可。这可用于在启用防病毒软件的情况下重复性能测试。
附言没有什么比问问题和去厕所更有助于解决问题=)抱歉。