这是我最近玩的第二款游戏,出于某些原因,它让 Windows不是使用磁盘缓存。我有 64GB 的 RAM。游戏本身占用大约 7GB,剩下 2GB 用于操作系统,这意味着超过 55GB 的 RAM 可用于缓存。全部的游戏资产约为 34GB,这意味着所有内容都可以而且应该被缓存。
玩了两个小时后,Windows 显示游戏已读完170GB磁盘中的数据。游戏从 Steam 启动,但实际上是一款 Origin (EA) 游戏,即两种 DRM 解决方案都已加载。游戏文件仍由 Steam 管理。
对于第一款游戏,我发现了一个愚蠢的解决方案:每次玩的时候我都会创建一个 RAM 磁盘,将安装的文件复制到该磁盘,然后以这种方式运行游戏。这非常令人恼火,因为只是为了玩游戏而复制如此大量的数据看起来太过分了。
资源监视器显示游戏进程一遍又一遍地读取相同的游戏文件。
也许是 Origin/Steam DRM 共同起作用了,但我根本不知道。
除了这两款游戏之外,没有其他应用程序或游戏出现此问题。
我尝试用 Google 搜索此问题,但没有任何结果。操作系统是默认配置的 Windows 10,也就是说我没有调整任何东西。如果我没记错的话,第一个游戏也是一款使用 Frostbite 引擎的 NFS 游戏。
人们确实对此有所抱怨:https://www.reddit.com/r/needforspeed/comments/eoqiop/my_hdd_is_screaming_while_playing_nfs_heat/
一些更新:
Microsoft 缓存集实用程序仅适用于 32 位,并且毫无用处,因为 Windows 10 磁盘缓存几乎没有限制。
最重要的是:我尝试手动缓存所有游戏资源,方法是将游戏文件复制到
NUL
。所有内容都已成功缓存,因此后续副本每秒的速度达到几 GB。一旦我启动游戏,缓存就会在我眼前减少,直到至少减少 12GB。游戏确实会从磁盘缓存中清除文件。编写游戏的人应该受到严厉惩罚。这太愚蠢、太可怕了,而且毫无意义。许多操作指南都指导如何将游戏安装在 SSD 磁盘上以消除速度减慢,这证实了这是一个普遍存在的问题,只是在我之前没有人真正花时间深入研究它。
这是任务管理器、资源监视器和 RAMMap 屏幕:
- 我已经通过实际使用 RAM 磁盘(这只适用于拥有超过 48GB RAM 的用户)并将游戏文件复制到其中来“解决”了这个问题,但这有点疯狂并且似乎有些过度。
答案1
这个游戏确实看起来编程效率低下,但我相信一些结果可以有其他的解释。
首先,资源监视器显示由过程,而不是由 Windows 从磁盘读取。因此,如果游戏一次又一次地重新读取相同的文件,则读取次数会被计算在内,但它们实际上可能来自内存缓存。游戏的读取和写入次数并不代表系统在磁盘上进行的 I/O。
其次,Windows 可以将内存缓存用于磁盘数据以外的其他用途。如果游戏分配内存(不同于磁盘 I/O),则内存缓存可能会用完。因此,当游戏启动时,内存缓存会减少并分配给进程工作内存,这是很自然的。
最后,Windows 内存分配算法不能保证在所有程序配置文件中都能完美运行。您的游戏实际上可能以非常低效的方式使用 I/O,而 Windows 对此优化不够。您的 RAM 磁盘解决方案是避免过多 I/O 的一种方法,将其转换为内存副本,但幸运的是,这些副本要快得多。