Devo ligar para o coletor de lixo durante o carregamento da tela?


9

Então, li um pouco sobre a Coleta de Lixo recentemente, por curiosidade, e há algo repetido com frequência: a coleta de lixo pode levar a um abrandamento repentino do programa, dependendo da "profundidade" da coleta.

Mas nos videogames, há um momento em que o usuário não consegue perceber um pequeno atraso: a tela de carregamento. Então, pensei, talvez seja útil prosseguir para a coleta de lixo completa durante uma fase de carregamento (via Collect ()), ter que esperar um segundo ou dois a mais não deve realmente afetar o usuário.

Minha pergunta é: é realmente útil ou não há benefício real em fazer isso?


Como parte do processo de depuração do meu jogo, forneci ao usuário a opção de chamar o Garbage Collector a qualquer momento. Dependendo de como isso acontece, também pode existir na versão final do jogo. Sugiro chamá-lo durante o carregamento de telas e, geralmente, em qualquer outro momento em que não interrompa visualmente o usuário. Se o seu jogo tiver uma animação mortal que vai para a tela preta, esta seria uma oportunidade perfeita para chamar o coletor de lixo também.
Krythic

Respostas:


13

Sim, chame como a última coisa que você faz ao carregar.

Isso maximizará o tempo entre o início do nível e o primeiro atraso devido a um GC.

Você também deve tentar minimizar as alocações em geral também, para não ter mais atrasos durante um nível.

Veja baixo desempenho em 360 e WP7 e caminhos duplos para o Nirvana do coletor de lixo


11
Além disso, é praticamente o ÚNICO momento em que você deve chamá-lo - especialmente nas estruturas compactas (XBox, WinPhone).
Jonathan Dickinson

11
@ JonathanDickinson: Absolutamente. Ele só deve ser chamado realmente onde o usuário esperaria uma pausa (carregando normalmente, talvez salvando também) e definitivamente não como parte de um loop / evento regular.
George Duckett
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.