Энтузиаст утверждает, что нашёл причину долгих загрузок в GTA Online и сократил их на 69 % | полезное на oremontekvartir

Grand Theft Auto Online отличается чудовищно долгими загрузками — на них жаловались ещё семь лет назад, когда игра только стартовала, и продолжают жаловаться сейчас. Некто T0ST утверждает, что разобрался в проблеме, нашёл один из основных источников бед и сумел сократить загрузки почти на 69 %.

Для начала — замеры автора и конфигурация его PC.

  • Сюжетный режим загружается примерно за 1 минуту 10 секунд.
  • Онлайн-режим загружается примерно за 6 минут.
  • Стартовое меню отключено, вход в Social Club не учитывается, время считается от логотипа Rockstar Games до геймплея.
  • Компьютер:
    • процессор — AMD FX-8350,
    • SSD — Kingston SA400S37120G,
    • оперативная память — две Kingston 8 192 Мб (DDR3-1337) 99U5471,
    • видеокарта — GeForce GTX 1070.

Как подчёркивает T0ST, он прекрасно знает — PC у него староват. Но вряд ли сборка настолько дряхлая, что онлайн загружается аж в шесть раз медленнее сюжетного режима. Кроме того, он нашёл свежий опрос на Reddit, по результатам которого 80 % из 271 участника пережидают в GTA Online загрузки от трёх минут или больше.

Комментарии красным — от T0ST.

В общем, T0ST надел плащ хакермена и начал раскопки. Сперва он обнаружил, что во время загрузки GTA Online есть период длиной больше 4 минут, когда одно из ядер процессора нагружается как следует, а накопитель, поток сетевых данных, ОЗУ и видеокарта практически простаивают. По наблюдениям T0ST, это начинается, когда GTAV загрузила всё, что касается одновременно сюжетного и сетевого режимов, и приступает к обработке данных, необходимых только для сетевого режима.

T0ST сделал вывод, что дело в очень плохом коде. Применив программистскую магию, он разобрал процессы GTAV на составляющие и выяснил, что в период нагрузки на одно ядро происходит синтаксический анализ файла JSON размером 10 мегабайт, куда входит около 63 000 записей. По мнению T0ST, в этом JSON хранятся данные товаров во внутриигровых магазинах (но напрямую с микротранзакциями они не связаны).

Как рассказывает T0ST, 10 мегабайт записей — это не беда, но программная логика не оптимизирована и читает эти данные слишком дотошно. С этим связана и вторая существенная проблема — программисты Rockstar не сделали толковое хеширование, из-за чего происходит чересчур много перепроверок данных.

Подозрительная нагрузка на одно ядро процессора.

Чтобы проверить свои догадки, T0ST собрал самопальную DLL-библиотеку и всунул её в GTAV. Она добавляет кеширование для анализа JSON и убирает ненужные проверки дублирования записей.

Результат загрузок GTA Online:

  • Без патчей — около 6 минут.
  • С патчем на устранение проверок дублирования — 4 минуты 30 секунд.
  • С патчем парсинга JSON — 2 минуты 50 секунд.
  • С обоими патчами одновременно — 1 минута 50 секунд, то есть на 69.4 % быстрее, чем в оригинальной версии.

T0ST пишет, что это не устранит вообще все проблемы с загрузками GTA Online на всех системах, но такая дыра в коде, мол, обнаруживается элементарным образом. «Если Rockstar каким-то образом это увидит — решение проблемы не должно занять больше одного дня и одного разработчика. Пожалуйста, сделайте с этим что-нибудь :<» — заканчивает своё расследование T0ST.

Подробнее изучить методику поиска можно в оригинальном посте. Осторожно: для понимания всего происходящего необходимы навыки программиста.

Источник: stopgame.ru

Топ товаров
Добавить комментарий