科普信息網(wǎng)

GTA5玩家們深受游戲異常緩慢載入速度困擾 原因終于找到了

發(fā)布時(shí)間:2021-03-05 15:29:39 來(lái)源:游研社 責(zé)任編輯:caobo

“看云模擬器”或?qū)⒊蔀闅v史。

長(zhǎng)久以來(lái),GTA5玩家們深受游戲異常緩慢的載入速度困擾。雖說(shuō)游戲已經(jīng)發(fā)售七年有余,玩家群體或多或少都提升了設(shè)備配置,讀取線下故事模式的速度也縮短至1-2分鐘。

但是線上模式的GTAOL似乎沒(méi)有受到玩家配置提升的影響,亦沒(méi)有在這七年里得到R星的任何優(yōu)化。從進(jìn)入游戲看見(jiàn)R星的巨大LOGO,到成功進(jìn)入線上模式獲得角色的操控權(quán),這一過(guò)程仍然需要花上數(shù)分鐘。

在暢游洛圣都之前,停留在洛圣都的天上“看云”,成了每位GTAOL玩家的日常。

人人都是云玩家

根據(jù)Reddit上7個(gè)月前發(fā)起的某項(xiàng)271人參與的不記名投票,僅有少數(shù)坐擁高端配置PC或次世代主機(jī)的玩家能夠在3分鐘內(nèi)進(jìn)入GTAOL,享受不到這種體驗(yàn)的玩家則占據(jù)了81.2%。

玩家們也試過(guò)尋找GTAOL載入速度奇慢無(wú)比的原因。有人將加載慢的問(wèn)題歸結(jié)于GTAOL的P2P戰(zhàn)局系統(tǒng),系統(tǒng)強(qiáng)制擁有不同網(wǎng)絡(luò)環(huán)境的玩家互連,數(shù)據(jù)同步困難致使加載緩慢。也有人認(rèn)為,硬盤(pán)的讀取速度會(huì)影響從游戲文件中讀取模型的速度,進(jìn)而影響加載速度。

此外在玩家社群中還流行著一種玄學(xué),即先進(jìn)入故事模式再進(jìn)入線上模式,比起從主菜單直接進(jìn)入線上模式會(huì)快個(gè)幾秒。

然而這樣的玄學(xué)并沒(méi)有技術(shù)宅T0ST最近發(fā)布的補(bǔ)丁來(lái)得實(shí)在。他只是破解并重寫(xiě)了一下程序代碼,便把GTAOL的加載時(shí)間縮短了近70%。

T0ST上個(gè)月重新拾起GTAOL,他的老電腦配置不算高,讀取線上模式大概需要6分鐘左右。T0ST無(wú)法理解一部擁有七年歷史的在線游戲讀取時(shí)間為何仍要如此之久,便結(jié)合網(wǎng)絡(luò)搜索結(jié)果與自用電腦的情況著手展開(kāi)研究。

T0ST首先同時(shí)打開(kāi)了GTA5與Win10系統(tǒng)的任務(wù)管理器。任務(wù)管理器顯示,當(dāng)GTAOL進(jìn)入讀取畫(huà)面,電腦的硬盤(pán)占用率完全可以忽略不計(jì);網(wǎng)絡(luò)占用率一開(kāi)始很高,在兩分鐘后也降到了較低的水平。

值得注意的是,CPU的占用率在這幾分鐘里居高不下,始終保持在60%-70%左右,CPU的八個(gè)核心處理器中只有一個(gè)在持續(xù)運(yùn)作。

T0ST所使用的CPU單核性能并不優(yōu)秀,因此讀取GTAOL的速度大幅落后于同等配置;但這無(wú)法解釋游戲讀取時(shí)對(duì)CPU的異常高占用。由于他不可能從R星那里要到源代碼,他只好自己著手反匯編,找到那份耗盡CPU效能的文件,并破譯文件中一部分未經(jīng)嚴(yán)格加密的代碼。

這份占用CPU的文件負(fù)責(zé)導(dǎo)入一份10MB大小的JSON文檔,文檔記錄了游戲中玩家能夠買(mǎi)到的所有物品——載具、設(shè)施、武器,加起來(lái)大概有63000個(gè)條目。

T0ST發(fā)現(xiàn),游戲代碼導(dǎo)入文檔與物品的效率奇低無(wú)比。首先,代碼每次解析JSON文檔中的一項(xiàng)物品后,都會(huì)重新計(jì)算文檔中的字符數(shù)量,這就需要63000次計(jì)算。

其次,代碼解析一項(xiàng)物品后,需要讀取這項(xiàng)物品的相關(guān)數(shù)據(jù)。每樣物品都有與之鏈接的數(shù)據(jù),例如物品售價(jià)、一輛車(chē)的時(shí)速、一把武器的屬性等等。物品與物品數(shù)據(jù)之間通過(guò)散列算法得出的特定值一一對(duì)應(yīng),這個(gè)特定值有如這一物品的身份證號(hào),便于代碼查詢(xún)。

為了防止“身份證號(hào)”重復(fù),導(dǎo)致文件沖突、游戲報(bào)錯(cuò),每次游戲?qū)胍豁?xiàng)物品及其數(shù)據(jù)之前,代碼都會(huì)例行檢查其他所有物品的算法值避免出現(xiàn)重復(fù),這種檢查還要重復(fù)63000次。

T0ST算了一下,GTAOL的讀取工作共計(jì)需要約1984531500次計(jì)算,這對(duì)CPU來(lái)說(shuō)確實(shí)是很大的工作量。

然而對(duì)文檔字符的數(shù)萬(wàn)次重復(fù)計(jì)算本身毫無(wú)意義,且物品與物品數(shù)據(jù)對(duì)應(yīng)的算法值經(jīng)T0ST驗(yàn)證,都是獨(dú)一無(wú)二的,根本不會(huì)出現(xiàn)重復(fù),因此在這近2億次的計(jì)算中,絕大部分的計(jì)算都在浪費(fèi)用電。

于是T0ST自己編寫(xiě)了兩個(gè)補(bǔ)丁。針對(duì)第一個(gè)問(wèn)題,T0ST創(chuàng)建了一個(gè)緩存,當(dāng)R星的代碼嘗試計(jì)算文檔字符數(shù)量的時(shí)候,會(huì)讀取緩存里的數(shù)據(jù),將計(jì)算次數(shù)從63000次減少到僅讀取緩存的1次。第二個(gè)問(wèn)題就更好解決了,T0ST讓代碼跳過(guò)了檢查算法值的步驟,直接省去了上億次的計(jì)算。

有了這兩個(gè)補(bǔ)丁,GTAOL在T0ST電腦上的讀取速度一躍縮短為1分50秒,整整提升了69.4%。

R星團(tuán)隊(duì)七年都沒(méi)有解決的問(wèn)題,T0ST一個(gè)人不到一天便搞定了。2月28日,T0ST發(fā)表了一篇博客記錄他的測(cè)試結(jié)果,并公開(kāi)補(bǔ)丁及源代碼供玩家們下載。

不過(guò)他也指出,補(bǔ)丁對(duì)于不同電腦的優(yōu)化效果必定存在差異。另外,使用補(bǔ)丁可能觸發(fā)游戲的反作弊機(jī)制,進(jìn)而導(dǎo)致賬戶(hù)封禁。

鑒于R星對(duì)于GTAOL修改與破解文件的行為一向毫不手軟,T0ST只能希望R星看到相關(guān)報(bào)道后放過(guò)自己,完善游戲從未修改過(guò)的代碼,讓“看云模擬器”成為歷史。

標(biāo)簽: GTA5 玩家

上一篇:手游《暗黑:不朽》將上市 《暗黑破壞神4》時(shí)長(zhǎng)可達(dá)40小時(shí)
下一篇:ROG游戲手機(jī)跑分曝光 刷新跑分記錄

新聞排行