Es heißt, dass die Ladezeit von GTA Online, die zuvor 6 Minuten betrug, auf etwa 1 Minute und 50 Sekunden gesenkt werden konnte, indem zwei äußerst einfache Funktionen korrigiert wurden, die einen Flaschenhals verursachten.
Es handelt sich nicht um einen offiziellen Patch, sondern um ein Experiment des Autors, der per DLL-Hooking nur die beiden problematischen Funktionen korrigierte. Dass Rockstar Games, das allein mit GTA Online seit dem Start Ende 2013 Einnahmen von weit über einer Billion Won erzielt hat, dieses einfache Problem all die Jahre nicht behoben hatte, wirkt schon ziemlich heftig.
Unten habe ich die Flaschenhälse kurz zusammengefasst. Im Originaltext werden Performance-Messung, Problemanalyse und der Lösungsweg (inklusive Code) spannend und detailliert beschrieben – unbedingt lesenswert.
- Json parsing with sscanf
- Der Spielcode parste eine ganze 10 MB große Item-Katalog-JSON-Datei und rief dabei für jeden Eintrag (insgesamt rund 63.000) die Funktion
sscanfauf.
strlen, das von sscanf aufgerufen wurde, las zur Bestimmung der Stringlänge Zeichen für Zeichen bis zum Ende der Datei.
- Allein dadurch, dass der 10-MB-String 63.000-mal hintereinander gelesen wurde, gingen zusätzlich 1 Minute und 30 Sekunden verloren.
- Hash key not used
-
Direkt anschließend suchte der Code beim Einfügen der geparsten Item-Informationen in ein Array die Einfügeposition durch lineare Suche "ab dem Anfang des Arrays".
-
Obwohl ein Hashwert verwendet wurde, um doppelte Einträge zu prüfen, wurde keine Hash-Map eingesetzt; allein für das Finden der Einfügeposition waren daher
("(63000^2+63000)/2")Prüfschritte nötig, was weitere 1 Minute und 40 Sekunden kostete.
Noch keine Kommentare.