Dicen que redujo el tiempo de carga de GTA Online de 6 minutos a alrededor de 1 minuto con 50 segundos corrigiendo dos funciones muy simples que causaban el cuello de botella.
No es un parche oficial; parece que el autor hizo el experimento corrigiendo solo esas dos funciones problemáticas mediante hooking de DLL. Resulta un poco excesivo pensar que Rockstar Games, que desde el lanzamiento a fines de 2013 hasta ahora ha generado más de 1 billón de wones solo con GTA Online, no hubiera resuelto este problema tan simple.
Abajo hice un breve resumen de los cuellos de botella. En el artículo original se explica de forma interesante y detallada la medición de rendimiento, la identificación del problema y hasta la solución (con código), así que vale mucho la pena leerlo.
- Json parsing with sscanf
- El código del juego estaba parseando un archivo JSON de catálogo de ítems de nada menos que 10 MB, y para cada elemento (aproximadamente 63,000 en total) llamaba a la función
sscanf.
La función strlen, llamada por sscanf, leía el archivo completo carácter por carácter hasta el final para calcular la longitud de la cadena.
- Estaba gastando 1 minuto y 30 segundos extra por leer consecutivamente la cadena de 10 MB unas 63,000 veces.
- Hash key not used
-
Justo después de lo anterior, al insertar en un arreglo la información de los ítems ya parseados, buscaba la posición de inserción mediante una búsqueda secuencial "desde el inicio del arreglo".
-
Aunque usaba un valor hash para comprobar si había contenido duplicado, no utilizaba un hashmap, así que solo para encontrar la posición de inserción pasaba por un proceso de verificación de
("(63000^2+63000)/2")veces, desperdiciando 1 minuto y 40 segundos más.
Aún no hay comentarios.