Стоит ли вызывать сборщик мусора во время загрузки экрана?


9

Итак, я недавно прочитал немного о Сборке мусора, из любопытства, и есть кое-что, что повторяется довольно часто: сборка мусора может привести к внезапному замедлению работы программы, в зависимости от «глубины» сбора.

Но в видеоиграх есть момент, когда пользователь не может заметить небольшую задержку: экран загрузки. Итак, я подумал, что может быть полезно перейти к полной сборке мусора во время фазы загрузки (через Collect ()), необходимость подождать секунду или две дольше не должна сильно повлиять на пользователя.

Мой вопрос: действительно ли это полезно, или нет никакой реальной выгоды для этого?


Как часть процесса отладки для моей игры, я предоставил пользователю возможность вызывать сборщик мусора в любое время. В зависимости от того, как это происходит, он также может существовать в финальной сборке игры. Я бы предложил вызывать его во время загрузки экранов и вообще в любое другое время, когда это не будет визуально прерывать пользователя. Если в вашей игре есть анимация смерти, которая отображается на черном экране, это также будет прекрасной возможностью вызвать сборщика мусора.
Krythic

Ответы:


13

Да, называйте это как последнее, что вы делаете при загрузке.

Это максимально увеличит время между началом уровня и первым лагом из-за GC.

Вы также должны пытаться свести к минимуму распределение в целом, хотя, чтобы вы не получили больше лагов на уровне.

См. Низкая производительность на 360 и WP7 и Двойные Пути к сборщику мусора Нирвана


1
Кроме того, это в значительной степени ЕДИНСТВЕННОЕ время, когда вы должны это называть - особенно на компактных платформах (XBox, WinPhone).
Джонатан Дикинсон

1
@JonathanDickinson: Абсолютно. На самом деле его следует вызывать только в том случае, если пользователь ожидает паузу (загрузка обычно, возможно, и сохранение), и определенно не как часть цикла / обычного события.
Джордж Дакетт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.