一名正在操纵T0st的黑客说,他已经弄清楚了一个核心问题,该问题导致《侠盗猎车手在线》的装载时间超过了必要的时间,长达数年之久。黑客已经发布了DLL修复概念证明,可将那些冗长的启动时间缩短大约70%。
侠盗猎车手在线(Grand Theft Auto Online)的PC加载时间一直是七年来的一个长期问题,尽管硬件得到了全面改善,并且游戏的发行商Take Take收入持续丰厚,但其运行速度仍然缓慢。去年的一次匿名Reddit民意测验发现,大约有一半的玩家在等待三到六分钟才能加载游戏,并且大约有35%的玩家等待更长的时间才能开始游戏。这不是科学调查,也不是任何事情,但是即使考虑到自我选择和报告问题,这些加载时间也很长,尤其是对于这样的老游戏而言。当单人游戏侠盗猎车手5加载速度往往快许多倍时,这个问题就更难理解了。
为了弄清楚问题的深处,T0st写道,他们首先对自己的CPU进行了性能分析,以试图弄清为什么游戏在加载过程中将单个CPU线程占用了超过四分钟的时间。在使用工具转储进程堆栈并在内存中运行时分解了GTA代码之后,T0st发现了一组(有些被混淆)的函数似乎正在解析10MB JSON文件,其总数超过63,000。
该JSON文件似乎是"网上商店目录"。描述了《侠盗猎车手》在线玩家可以使用游戏内货币购买的每个物品。对于现代计算机而言,解析10MB的文件应该不是太大的问题,但是在具体实现中出现的一些晦涩的问题似乎会导致性能大幅下降。
一方面,用于解析JSON字符串的特定函数(在本例中为sscanf)显然在读取每条数据后反复运行耗时的strlen检查函数。 T0st写道,仅缓存该字符串长度值以加快检查速度,就可以单独减少50%以上的加载时间。
解析所有这些JSON数据后,GTA Online似乎以一种极其低效的方式将其加载到数组中,随着整个数组的增长从头开始检查整个数组是否存在重复项。 T0st写道,用可以快速检查重复项的哈希表代替该过程可单独减少大约25%的加载时间。
结合这两个修复程序后,T0st说GTA Online的加载时间从测试机器上的六分钟减少到不到两分钟。那些对复制结果感兴趣的人可以从T0st的源代码构建类似的DLL。不过,由于这样做很容易(并且错误地)引起了游戏的反作弊检查,因此玩家应该自己承担风险。同时,T0st写道,为Rockstar一方的所有玩家实施此修复程序,单个开发人员解决问题的时间不应超过一天。希望此问题引起新的关注,使Rockstar早日这样做。