Поклонники ускорили скорость загрузки GTA Online

105
Как заработать деньги и купить Benefactor Stirling GT в GTA Online

Мультииплеерный режим Grand Theft Auto 5 грузится несказанно долго. Инженер под ником t0st, играющий в GTA Online, решил понять, в чем тут дело.

Проведя несколько экспериментов, t0st выяснил, что на его PC одиночная кампания грузится 70 секунд, а мультиплеер — в среднем 360 секунд. Опросы среди фанатов показывали, что может быть и хуже.

Инженер заметил, что увеличение производительности PC по-разному влияет на скорость загрузки мультиплеера и одиночного режима. У игроков с мощным железом GTA Online могла грузиться за пару минут, но загрузка сюжета не ускорялась. Значит, есть простор для оптимизации.

Затем t0st решил посмотреть, как вообще происходит загрузка онлайн-режима. Оказалось, что большую часть времени GTA Online грузит на 100% одно из ядер процессора, не создавая нагрузку ни на сеть, ни на диск, ни на память. Это было странно.

Чтобы найти суть проблемы, инженер запустил GTA Online под профайлером и обнаружил пару мест, где во время загрузки игра проводила больше всего времени. Затем нужные места были изучены с помощью дизассемблера и x64dbg.

Оказалось, что большую часть времени при загрузке игра тратит на парсинг гигантского JSON-объекта весом примерно в 10 мегабайт. Внутри у него порядка 63 тысяч записей; скорее всего, полагает t0st, это каталог всех предметов, которые можно купить в игре.

Изучив парсер JSON и обработку файла, t0st пришел к выводу, что код работает крайне неоптимально. Например, при добавлении нового элемента из JSON в игровые данные происходит поиск по всему массиву уже добавленных уникальных ключей вместо использования hashmap или похожих быстрых решений.

Кроме того, оказалось, что все идентификаторы и элементы в JSON и так уникальны — проверять их еще раз нет никакого смысла. Так или иначе, t0st понял, что проблему можно устранить: нужно лишь сделать неофициальный патч.

Инженер переопределил пару функций, использовавшихся при обработке JSON, убрав из них ресурсоемкие, но бессмысленные проверки. К сожалению, код привязан к адресному пространству игры, после выхода официального патча оно может изменить.

После патча загрузка GTA Online ускорилась с приблизительно 360 секунд до примерно 110 секунд — то есть более чем в три раза. Инженер надеется, что разработчики из Rockstar Games обратят внимание на его эксперимент и сделают разбор JSON более эффективным.

Последнее обновление 2 года назад — GameZoom

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии