首页 首页 资讯 查看内容

一个 if 判断19.8亿次,而且7年没人敢动手修复

2022-06-18| 发布者: 遵化新闻网| 查看: 135| 评论: 1|文章来源: 互联网

摘要: 你见过最烂的代码有多差?我猜肯定比不上GTA5的“屎山代码”,一个if进行了19.8亿次判断!这是怎么回事?1.问题......
贴吧小号购买 http://www.tiebahao.net

你见过最烂的代码有多差?我猜肯定比不上GTA5的“屎山代码”,一个if进行了19.8亿次判断!这是怎么回事?

1.问题的发现

其实这个问题一直存在,很多玩家在论坛上表示每次登录都需要花费5分钟甚至更长时间。但是GTA5厂商一直没有关注这个问题,更是没有修复。直到有一天一个玩家受不了了,和其他玩家不同的是:他是一个黑客。

这位黑客玩家想调查一下为什么登录这么慢,我们看看他的调查过程。

2.排查问题

首先他先使用了最简单的任务管理器,观察GTA5登录过程中资源的使用情况。

可以看到点击登录之后,CPU使用率飙升。与此同时,内存、GPU、硬盘的消耗并没有增加。因此他判断问题应该出在代码上。

接下来他使用一些黑客工具对CPU和内存进行分析,找到了真正耗时执行的方法:sscanf。

sscanf是一个解析文件数据的方法,而sscanf解析的是一个包含63000条数据、体积达到10M的JSON文件!!

JSON文件的内容是所有可购买及可升级的GTA线上商店商品。

sscanf解析出一项数据后,会将数据存储到数组中。但是,在存储到数组之前,需要检查该项数据是否已经存在于数组中。判断的方式就是遍历,一个一个对比校验。

63000条数据,根据他的计算,需要进行(n^2+n)/2=(63000^2+63000)/2=1984531500次比较。

3.解决

找到问题之后,这位黑客小哥都震惊了。这种情况应该使用哈希表啊,为什么要用数组呢?

黑客小哥自己修复了这个问题,时间一下缩短了70%。随后他分享了自己的发现,并给出了解决方案。在黑客小哥的帖子火了之后,GTA5游戏厂商联系了他,采纳了他的解决方案并慷慨地给予了一万美金的奖励。

4.总结

对于历史遗留的代码,只要程序能正常执行,程序员就不会去优化。这种问题在任何团队中都会出现,要想解决这个问题就需要有人维护代码质量,及时发现并修复这些问题代码。

破窗效应在代码项目中也一样存在,如果项目中存在“破损的窗户”,很快就会有人打破更多的窗户。



鲜花

握手

雷人

路过

鸡蛋
| 收藏

最新评论(1)

Powered by 遵化新闻网 X3.2  © 2015-2020 遵化新闻网版权所有