我在 32GB RAM 的机器上玩星际争霸 2。我在想为什么游戏的最大内存只有 2GB,但它仍然需要加载不同的单人地图。
我看到的内存结构是“基础游戏框架 + 当前级别进入工作内存”,其中包括所有音乐、精灵等。当我去加载另一个级别时,我会从框架中获得几次缓存命中,然后当应用程序从我的硬盘中获取新级别时,会出现几次未命中。
我的问题是,是否有人知道是否有办法缓存整个游戏文件夹,因为它只有 13GB,从而使对任何与游戏相关的资源的任何访问都成为 RAM 缓存命中,从而减少加载时间?
我认为如果它全部在 RAM 中(PC3-12800),理论带宽是~12GByte/秒,这会使所有加载几乎立即完成,不是吗?
答案1
为什么不尝试将其安装在 RAM 驱动器中,或将文件移到那里?除非对程序进行逆向工程,否则 RAM 驱动器可能是最好的选择。
以下是有关 RAM 磁盘的更多超级用户信息:https://superuser.com/questions/522011/is-there-any-open-source-ramdisk-software-for-windows
答案2
您的操作系统已经按照您的意愿行事了 —— 它会主动将最近使用的方式从硬盘读取的所有数据缓存在 RAM 中。
对于任何称职的操作系统来说,真正“可用”的内存应该非常小 - 只有几兆字节。所有剩余内存都用于缓存磁盘数据。如果某个程序使用malloc
或请求大内存块GlobalAlloc
,则缓存以供读取的非重要数据将被丢弃以满足此内存分配请求。
这种缓存的一个有趣的特性是,即使你有一个 32 位应用程序,它不能分配超过 4GB 的 RAM,该应用程序访问的文件仍然会被你的 64 位操作系统缓存,即使所有文件的总大小远远超过 4GB。
换句话说,如果您有 32GB RAM,而您开始玩 13GB 大小的游戏,Windows 将尝试主动缓存 RAM 中的所有 13GB。但是,这并不意味着它会永远留在缓存中,因为大多数数据都经过了高度压缩,而星际争霸需要在内存中解压这些数据才能对其进行操作并创建您的游戏世界表示,因此它可能会尝试从 Windows 分配大量内存,这可能会迫使它丢弃一些缓存内容(但即使如此,也以最近最少使用的方式丢弃)。
从实际角度来看,加快加载时间的最简单方法可能是使用 SSD 驱动器。现代 SSD 驱动器的读取速度通常约为 500MB/s - 比典型硬盘驱动器快 5 倍左右。更好的是,SSD 读取速度在读取非常小的文件时不会大幅下降(对于标准硬盘驱动器,读取小文件的速度可能会慢 100 倍)。
答案3
打开 FAR Manager 或 Total Commander,将整个 StarCraft 文件夹复制到 nul。它将被加载到内存中。
但我不认为这会大大加快加载速度。加载几个文件 100 MB 不是问题。只有当您看到 HDD 指示灯几乎不停地闪烁时,您才可能认为 HDD 限制了您的性能。