Soll ich den Garbage Collector während des Ladebildschirms anrufen?

9

Aus Neugier habe ich in letzter Zeit ein wenig über Garbage Collection gelesen, und es gibt etwas, das ziemlich oft wiederholt wird: Garbage Collection kann je nach "Tiefe" der Sammlung zu einer plötzlichen Verlangsamung des Programms führen.

Aber in Videospielen gibt es einen Moment, in dem der Benutzer eine kleine Verzögerung nicht wirklich bemerken kann: das Laden des Bildschirms. Daher dachte ich, es könnte nützlich sein, während einer Ladephase (über Collect ()) mit der vollständigen Speicherbereinigung fortzufahren. Ein oder zwei Sekunden länger warten zu müssen, sollte den Benutzer nicht wirklich beeinträchtigen.

Meine Frage ist, ist es wirklich nützlich oder gibt es keinen wirklichen Vorteil, dies zu tun?

Jupotter
quelle
Im Rahmen des Debug-Prozesses für mein Spiel habe ich dem Benutzer die Möglichkeit gegeben, den Garbage Collector jederzeit aufzurufen. Abhängig davon, wie dies abläuft, kann es auch im endgültigen Build des Spiels vorhanden sein. Ich würde vorschlagen, es während des Ladebildschirms und im Allgemeinen zu jeder anderen Zeit aufzurufen, wenn es den Benutzer nicht visuell unterbricht. Wenn Ihr Spiel eine Todesanimation hat, die auf einen schwarzen Bildschirm angezeigt wird, ist dies eine perfekte Gelegenheit, auch den Müllsammler anzurufen.
Krythic

Antworten:

13

Ja, nennen Sie es das Letzte, was Sie beim Laden tun.

Dies maximiert die Zeit zwischen dem Start des Levels und der ersten Verzögerung aufgrund eines GC.

Sie sollten auch versuchen, die Zuweisungen im Allgemeinen zu minimieren, damit Sie während eines Levels keine Verzögerungen mehr bekommen.

Siehe Schlechte Leistung bei 360 und WP7 und Twin Paths To Garbage Collector Nirvana

George Duckett
quelle
1
Außerdem ist es so ziemlich das EINZIGE Mal, dass Sie es aufrufen sollten - insbesondere bei kompakten Frameworks (XBox, WinPhone).
Jonathan Dickinson
1
@ JonathanDickinson: Auf jeden Fall. Es sollte nur dort aufgerufen werden, wo der Benutzer eine Pause erwarten würde (normalerweise laden, möglicherweise auch speichern) und definitiv nicht als Teil einer Schleife / eines regulären Ereignisses.
George Duckett