Devo chiamare il Garbage Collector durante la schermata di caricamento?


9

Quindi, ho letto un po 'su Garbage Collection ultimamente, per curiosità, e c'è qualcosa che si ripete abbastanza spesso: la garbage collection può portare a un improvviso rallentamento del programma, a seconda della "profondità" della raccolta.

Ma nei videogiochi, c'è un momento in cui l'utente non può davvero notare un piccolo ritardo: caricamento della schermata. Quindi, ho pensato, potrebbe essere utile procedere alla raccolta completa dei rifiuti durante una fase di caricamento (tramite Collect ()), dover aspettare un secondo o due in più non dovrebbe avere un impatto reale sull'utente.

La mia domanda è: è davvero utile o non ci sono vantaggi reali nel fare questo?


Come parte del processo di debug per il mio gioco, ho fornito all'utente un'opzione per chiamare il Garbage Collector in qualsiasi momento. A seconda di come va, può anche esistere nella build finale del gioco. Suggerirei di chiamarlo durante il caricamento delle schermate e generalmente in qualsiasi altro momento in cui non interrompa visivamente l'utente. Se il tuo gioco ha un'animazione di morte che passa allo schermo nero, questa sarebbe l'occasione perfetta per chiamare anche il garbage collector.
Krythic,

Risposte:


13

Sì, chiamalo come ultima cosa che fai durante il caricamento.

Ciò massimizzerà il tempo tra l'inizio del livello e il primo ritardo dovuto a un GC.

Dovresti anche cercare di minimizzare anche le allocazioni in generale, quindi non ottenere più ritardi durante un livello.

Guarda prestazioni scadenti su 360 e WP7 e Twin Paths To Garbage Collector Nirvana


1
Inoltre è praticamente l'unica volta che dovresti chiamarlo, specialmente sui framework compatti (XBox, WinPhone).
Jonathan Dickinson,

1
@JonathanDickinson: Assolutamente. Dovrebbe davvero essere chiamato solo dove l'utente si aspetterebbe una pausa (caricamento in genere, forse anche il salvataggio) e sicuramente non come parte di un evento loop / regolare.
George Duckett,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.