Dizem que o tempo de carregamento do GTA Online, que levava 6 minutos, foi reduzido para a faixa de 1 minuto e 50 segundos ao corrigir duas funções extremamente simples que causavam gargalo.
Não é um patch oficial; foi o resultado de um experimento em que o autor corrigiu apenas as duas funções problemáticas por meio de hooking de DLL. É meio absurdo pensar que a Rockstar Games, que faturou mais de 1 trilhão de won apenas com o GTA Online desde o lançamento no fim de 2013 até agora, não tivesse resolvido esse problema tão simples.
Abaixo está um resumo breve dos gargalos. No texto original, há medições de desempenho, identificação do problema e até o método de correção (com código), tudo explicado de forma interessante e detalhada, então vale muito a leitura.
- Json parsing with sscanf
- O código do jogo fazia parsing de um arquivo JSON de catálogo de itens de impressionantes 10 MB e chamava a função
sscanfpara cada item (cerca de 63.000 no total).
A função strlen, chamada por sscanf, lia o arquivo inteiro até o fim, caractere por caractere, para calcular o comprimento da string.
- Ao reler a string de 10 MB 63.000 vezes seguidas, o jogo desperdiçava mais 1 minuto e 30 segundos.
- Hash key not used
-
Logo em seguida ao ponto acima, ao inserir em um array as informações dos itens já processadas, o código procurava a posição de inserção por meio de uma busca sequencial "a partir do início do array".
-
Apesar de usar valores de hash para verificar se havia conteúdo duplicado, não utilizava um hashmap, então só para encontrar a posição de inserção passava por
("(63000^2+63000)/2")verificações, desperdiçando mais 1 minuto e 40 segundos.
Ainda não há comentários.