FlasherXXL schrieb:
Umso mehr wundere ich mich aber, warum mehrere Programmierer bei Rockstar, die den Code kennen (sollten), es nie geschafft haben, diesen Fehler zu beheben.
Das Problem liegt eben nicht (hauptsächlich) bei Rockstar.
https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/ schrieb:
Original online mode load time: ~6m flat
Time with only duplication check patch: 4m 30s
Time with only JSON parser patch: 2m 50s
Time with both issues patched: 1m 50s
Einerseits ist strlen (bzw. scanf) beim Parsen für die enorme Zeit verantwortlich, was an der externen Lib liegt bzw. am Handling der Strings in C.
Andererseits war Rockstar zu blöd und hat wahrscheinlich bei der Deduplication der Items keine Hashmap verwendet, sondern ist ein Array durchlaufen. Also einfach die falsche Datenstruktur dafür verwendet. Stells dir so vor, dass wenn die Farbeimer im Baumarkt nicht mehr nach Farbe gruppiert, sondern einfach dumm ins Regal gestellt werden. Die Sortierung ist also nicht "blau, weiß, grün", sondern "blau, grün, weiß, grün, grün, blau, grün, blau, rot, ...". Bei einer Hashmap greifst du zur weißen Farbe und hast sie sofort, bei den unsortierten Eimern (Array) musst du jeden einzelnen Eimer nach der Farbe prüfen, bis du irgendwann deine gewünschte Farbe hast.
Läufst du hierbei das Array durch und willst gleiche Eimer finden, musst du halt einerseits alle Eimer durchlaufen und andererseits wieder alle Eimer und beide vergleichen. Deshalb hast du hier keine Laufzeit von O(1), also direkt Zugriff darauf, sondern O(n^2), ergo quadratisch. Heißt hast du vier Eimer, bekommst du es mit der Hashmap trotzdem direkt, mit nem Array brauchst du hier maximal 16 Versuche, bis du dein Ergebnis hast. Hast du 50 Farben, ist die Hashmap wieder sofort verfügbar, mit nem Array benötigst du 2500 Zugriffe.
Das sind aber beides Probleme, die bei der Entwicklung hätten auffallen müssen. Ein Externer hat es mit simplem Profiling ja ebenso hinbekommen und musste dafür sogar den Umweg über nen Disassembler gehen - hatte also keine Funktionsaufrufe mit Namen, sondern sowas vor sich:
https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/ schrieb:
Also eigentlich nur peinlich für Rockstar, dass die Ladezeit nicht nur drei, sondern ganze sechs Minuten beträgt. Er sucht also ganze drei Minuten nach doppelten Farbeimern...