Czy powinienem zadzwonić do śmietnika podczas ładowania ekranu?

9

Tak, ostatnio czytałem trochę z Garbage Collection, z ciekawości, i jest coś, co powtarza się dość często: zbieranie śmieci może prowadzić do nagłego spowolnienia programu, w zależności od „głębokości” kolekcji.

Ale w grach wideo jest chwila, w której użytkownik tak naprawdę nie zauważa małego opóźnienia: ekranu ładowania. Pomyślałem więc, że przydatne może być przejście do pełnego wyrzucania elementów bezużytecznych podczas fazy ładowania (przez Collect ()), ponieważ odczekanie sekundy lub dwóch dłużej nie powinno tak naprawdę wpłynąć na użytkownika.

Moje pytanie brzmi: czy to jest naprawdę przydatne, czy też nie ma w tym żadnej realnej korzyści?

Jupotter
źródło
W ramach procesu debugowania mojej gry zapewniłem użytkownikowi możliwość wywołania Garbage Collector w dowolnym momencie. W zależności od tego, jak to się potoczy, może również istnieć w ostatecznej wersji gry. Sugerowałbym wywołanie go podczas ładowania ekranów i ogólnie w każdym innym momencie, w którym wizualnie nie przeszkadza to użytkownikowi. Jeśli twoja gra ma animację śmierci, która przechodzi na czarny ekran, byłaby to idealna okazja, aby zadzwonić do śmieciarza.
Krythic

Odpowiedzi:

13

Tak, nazywaj to jako ostatnią rzeczą, którą robisz podczas ładowania.

Pozwoli to zmaksymalizować czas między początkiem poziomu a pierwszym opóźnieniem z powodu GC.

Powinieneś również starać się minimalizować przydziały w ogóle, aby nie dostawać więcej opóźnień podczas poziomu.

Zobacz Niska wydajność na 360 i WP7 oraz Twin Paths To Garbage Collector Nirvana

George Duckett
źródło
1
Jest to także TYLKO czas, w którym powinieneś to nazwać - szczególnie w kompaktowych ramach (XBox, WinPhone).
Jonathan Dickinson
1
@JathanathanDickinson: Absolutnie. Powinno być tak naprawdę wywoływane tylko tam, gdzie użytkownik oczekiwałby pauzy (zwykle ładuje się, może też oszczędza), a na pewno nie jako część zdarzenia pętli / regularnego.
George Duckett