首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《GTA》载入时间终于缩短了?码农拯救世界

由于新内容的不断涌入,《GTA》在发布七年后仍然是一种受欢迎的游戏(且盈利非常可观),但Rockstar似乎无法改善的一件事是该游戏着名的长时间载入。

上周末,一个进取心极强的开发人员tost终于发现了为什么GTA Online载入时间如此之长-即使在具有快速处理器和存储设备的机器(例如PlayStation 5和PC)上也得以解决,并解决了这些问题,将其载入时间减少了70%。

在中端PC上为GTA Online加载了6分钟的内容后,tost在下一次加载游戏时打开了任务管理器,并发现了奇怪的事情:在一分钟后,他的计算机的CPU使用率急剧上升,但是几乎不存在存储和网络使用情况。这表明,漫长的加载时间不是由Rockstar的服务器或从驱动器读取数据引起的,而是CPU上正在运行某些内容 。需要大量处理才能完成的事情,并且仅使用了一个线程。

有了这些知识,tost使用了一系列的编程和调试工具来发现两个主要问题。

首先,游戏正在读取游戏中所有可购买物品的文本文件-在63,000个物品中的每个物品之后,它重新计算10MB文本文件中的每个字符。进行一次此计数没什么大不了的,但是进行63,000次运算会浪费大量CPU时间。

其次,为了准备所有已读入的物品数据,游戏会记录与该物品相关的数据(例如其名称,价格,类别,统计数据)和该物品的哈希(本质上是唯一计算得出的“指纹”)识别它)。每次游戏从列表中存储一个项目(记得要发生63,000次)时,它都会将正在存储的项目的哈希值与已经存储的所有其他项目的哈希值进行比较。

最初,这不需要花费很多时间,但是随着成功加载到游戏中的物品数量增加,此检查将花费越来越长的时间。总的来说,t0st估计进行了1,984,531,500次检查(将近20亿次!),再次占用了大量的CPU时间。游戏这样做是为了确保最终列表中没有重复项,但是鉴于列表开头是完全空的,并且正在加载的文件没有重复项,因此检查实际上是没有意义的。

为了解决这些问题,tost编写了自己的代码,该代码将覆盖游戏的某些功能。为了解决“读入项目”的问题,他创建了一个基本的缓存,该缓存一次计算项目列表的长度,然后在Rockstar的代码要求长度时,实际上不再次进行计算就返回相同的值。这样可以将检查的次数从63,000个减少到1次,从而节省了大量不必要的工作。

第二个解决方法更加容易。正如tost认为不需要检查重复项一样,他的代码只是直接插入新项,而根本不执行哈希检查。这意味着几乎不需要进行二十亿次检查,CPU可以快速完成该过程。

有了这两个补丁,GTA在线加载方式更快。在tost的PC上,避免重复检查项目将加载时间从六分钟缩短到四分半钟,并且添加了项目加载修复程序后,加载时间进一步缩短了,仅为一分50秒。加载时间减少了69.4%,这是绝对令人难以置信的,因为它只需要修改两个功能即可。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210302A03C3J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券