打开GTA 5竟要跑19.8亿次if语句!黑客嘲讽R星代码烂,修改后直接省70%加载时间...

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:58   1533   0

Python实战社群

Java实战社群

长按识别下方二维码,按需求添加

扫码关注添加客服

进Python社群▲

扫码关注添加客服

进Java社群

贾浩楠 发自 凹非寺
量子位 报道 | 公众号 QbitAI

一支烟的功夫,GTA 5联机版终于打开了。

「7年了!GTA 5联机版加载还是这么慢??」

Please wait forever to play

Reddit、Steam、HackerNews上,无数玩家吐槽抱怨……

进游戏少则等5、6分钟,多则20分钟。

终于,一个黑客大哥实在忍不了,用逆编译器逐条查看运行情况,终于找到原因。

原来,R星(游戏开发商RockStar)写的代码太低效,加载时,一个if语句竟然循环了19.8亿次….

幕后黑手:谁占用大量时间?

加载GTA 5 Online到底有多慢?

硬件拉满的土豪玩家请无视

Reddit相关板块发起的调查中,超过80%的玩家,都要等3分钟以上,有的甚至超过15分钟。

而且,从7年前Online上线到今天,这个情况丝毫没有改善。

暴躁的,已经骂起了脏话……

但奇怪的是,如果你选择是故事模式(单机版),加载就会快很多,感觉甚至像两个不同的工作室开发的游戏。

具体到这位黑客大哥的例子,他自己的硬件配置如下:

CPU,是老而弥坚的AMD FX-8350,2012年上市,采用“推土机”架构,超频潜力惊人。

显卡还是GTX 1070。

这样今天看起来老旧的配置,打开单机版GTA 5需要1分10秒,而加载联机版则6分钟起。

黑客大哥用了最简单的Windows任务管理器,来判断联机版GTA 5在启动时,都调用了哪些计算机资源。

在1分钟的时间分界线上,之前是加载的是单机和联机版通用的基础内容,之后是联机版独有的内容。

可以看到,联机版GTA 5,加载时调用大量CPU资源至少长达4分钟之久。

而同时,内存、GPU、硬盘的使用情况几乎没有明显变化。

所以,问题大概率出在代码上。

“R星代码写太烂!”

黑客大哥在开扒R星代码之前,就说:

我闻到一股烂代码的味道…..

为了找出到底那一部分程序卡住了CPU,他使用了工具Luke Stackwalker,对CPU任务堆栈进行采样分析。

Luke Stackwalker对于闭源应用程序,可以转存正在运行的进程堆栈,和当前指令指针的位置,以一定时间间隔建立一个调用树。

最后将数据整合,就可以得到程序运行统计数据。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP