给他爱5线上模式加载速度缓慢的原因找到了

长久以来,GTA5玩家们深受游戏异常缓慢的载入速度困扰。虽说游戏已经发售七年有余,玩家群体或多或少都提升了设备配置,读取线下故事模式的速度也缩短至1-2分钟。

但是线上模式的GTAOL似乎没有受到玩家配置提升的影响,亦没有在这七年里得到R星的任何优化。从进入游戏看见R星的巨大LOGO,到成功进入线上模式获得角色的操控权,这一过程仍然需要花上数分钟。

在畅游洛圣都之前,停留在洛圣都的天上“看云”,成了每位GTAOL玩家的日常。

人人都是云玩家

根据Reddit上7个月前发起的某项271人参与的不记名投票,仅有少数坐拥高端配置PC或次世代主机的玩家能够在3分钟内进入GTAOL,享受不到这种体验的玩家则占据了81.2%。

玩家们也试过寻找GTAOL载入速度奇慢无比的原因。有人将加载慢的问题归结于GTAOL的P2P战局系统,系统强制拥有不同网络环境的玩家互连,数据同步困难致使加载缓慢。也有人认为,硬盘的读取速度会影响从游戏文件中读取模型的速度,进而影响加载速度。

此外在玩家社群中还流行着一种玄学,即先进入故事模式再进入线上模式,比起从主菜单直接进入线上模式会快个几秒。

然而这样的玄学并没有技术宅T0ST最近发布的补丁来得实在。他只是破解并重写了一下程序代码,便把GTAOL的加载时间缩短了近70%。

T0ST上个月重新拾起GTAOL,他的老电脑配置不算高,读取线上模式大概需要6分钟左右。T0ST无法理解一部拥有七年历史的在线游戏读取时间为何仍要如此之久,便结合网络搜索结果与自用电脑的情况着手展开研究。

T0ST首先同时打开了GTA5与Win10系统的任务管理器。任务管理器显示,当GTAOL进入读取画面,电脑的硬盘占用率完全可以忽略不计;网络占用率一开始很高,在两分钟后也降到了较低的水平。

值得注意的是,CPU的占用率在这几分钟里居高不下,始终保持在60%-70%左右,CPU的八个核心处理器中只有一个在持续运作。

T0ST所使用的CPU单核性能并不优秀,因此读取GTAOL的速度大幅落后于同等配置;但这无法解释游戏读取时对CPU的异常高占用。由于他不可能从R星那里要到源代码,他只好自己着手反汇编,找到那份耗尽CPU效能的文件,并破译文件中一部分未经严格加密的代码。

这份占用CPU的文件负责导入一份10MB大小的JSON文档,文档记录了游戏中玩家能够买到的所有物品——载具、设施、武器,加起来大概有63000个条目。

T0ST发现,游戏代码导入文档与物品的效率奇低无比。首先,代码每次解析JSON文档中的一项物品后,都会重新计算文档中的字符数量,这就需要63000次计算。

其次,代码解析一项物品后,需要读取这项物品的相关数据。每样物品都有与之链接的数据,例如物品售价、一辆车的时速、一把武器的属性等等。物品与物品数据之间通过散列算法得出的特定值一一对应,这个特定值有如这一物品的身份证号,便于代码查询。

为了防止“身份证号”重复,导致文件冲突、游戏报错,每次游戏导入一项物品及其数据之前,代码都会例行检查其他所有物品的算法值避免出现重复,这种检查还要重复63000次。

T0ST算了一下,GTAOL的读取工作共计需要约1984531500次计算,这对CPU来说确实是很大的工作量。

然而对文档字符的数万次重复计算本身毫无意义,且物品与物品数据对应的算法值经T0ST验证,都是独一无二的,根本不会出现重复,因此在这近2亿次的计算中,绝大部分的计算都在浪费用电。

于是T0ST自己编写了两个补丁。针对第一个问题,T0ST创建了一个缓存,当R星的代码尝试计算文档字符数量的时候,会读取缓存里的数据,将计算次数从63000次减少到仅读取缓存的1次。第二个问题就更好解决了,T0ST让代码跳过了检查算法值的步骤,直接省去了上亿次的计算。

有了这两个补丁,GTAOL在T0ST电脑上的读取速度一跃缩短为1分50秒,整整提升了69.4%。

R星团队七年都没有解决的问题,T0ST一个人不到一天便搞定了。2月28日,T0ST发表了一篇博客记录他的测试结果,并公开补丁及源代码供玩家们下载。

不过他也指出,补丁对于不同电脑的优化效果必定存在差异。另外,使用补丁可能触发游戏的反作弊机制,进而导致账户封禁。

鉴于R星对于GTAOL修改与破解文件的行为一向毫不手软,T0ST只能希望R星看到相关报道后放过自己,完善游戏从未修改过的代码,让“看云模拟器”成为历史。


热门相关:修真聊天群   原配宝典   女总裁的超级兵王   倾世宠妻   超凡玩家