《GTAOL》是全球最受欢迎的网络游戏之一,是神作《GTA5》的在线模式,但它有一个公认的缺点:载入太慢。
拉脱维亚程序员tostercx在个人博客中写道,他的电脑CPU是AMD FX-8350,GPU是GeForce GTX 1070,内存为8GB 金士顿,但加载《GTAOL》需要6分钟,加载《GTA5》只需要1分10秒。
根据一项针对271人的调查显示,只有51人的载入时间在1-3分钟,125人的时间为3-6分钟,还有95人的时间在6分钟以上,如下图所示:
首先,tostercx使用任务管理器查看加载《GTAOL》时的系统性能,结果发现了一件怪事:游戏最大限度地使用了CPU的一个核长达4分钟,但期间几乎没有使用磁盘、网络、GPU甚至内存。
接下来,tostercx使用了性能分析工具——Luke Stackwalker,以剖析《GTAOL》的代码,结果他发现里面有某种混淆、加密的东西,用乱码代替了大多数指令。
事实证明,《GTAOL》花了很长时间解析一个JSON文件,它似乎包含了线上购物和升级的数据。
然而,这个JSON解析器的设计很糟糕,其解析后会出现一个缓慢的重复数据删除例程,导致载入时间过长。
tostercx想了一个办法,他编写了一个.dll文件,并将其挂钩一些函数,最后注入游戏中,如下图所示:
经过测试,在编写并加入.dll文件后,游戏的载入时间为1分50秒,明显短于之前的6分钟。
tostercx表示,要解决游戏载入问题很简单,对于R星的程序员不会耗费超过1天时间,但这是一个巨大的漏洞,不明白为什么R星这么多年都没有发现它。
目前,tostercx已制作补丁,并放在了github上。
领取专属 10元无门槛券
私享最新 技术干货