Unity 6.3
0 онлайн 46 гостей 3 в системе
Вход

Настройка сбора мусора

По умолчанию Unity выполняет сбор мусора постепенно. Если вы хотите больше контроля над тем, когда и как происходит сбор мусора, у вас есть следующие варианты:

Отключение постепенной сборки мусора

Чтобы отключить приростную сборку мусора:

  1. Откройте окно Project Настройки (Изменить > Project Настройки)
  2. Перейдите в Настройки (Игрок > Другие настройки > Настройка)
  3. Отключите флажок Использовать постепенно GC.

Инкрементальный сбор мусора полезен в большинстве Unity проектов, особенно если проект имеет пики сбора мусора. Однако, инкрементальный сбор мусора добавляет барьеры записи к любым вызовам, которые изменяют ссылки, так что вы можете пожелать отключить его, если ваш проект не вызывает сбор мусора в критически важных секциях. Отключение инкрементального сбора мусора в этой ситуации может повысить производительность вашего скриптового кода в вашем проекте.

Используйте Profiler, чтобы убедиться, что ваше приложение работает так, как вы ожидаете. Если вы анализируете захват Profiler в изоляции, может быть трудно выяснить, как инкрементальное удаление мусора влияет на производительность. Наилучшей практикой является профилирование одной и той же критической секции производительности дважды: один раз с включенным инкрементальным удалением мусора и один раз с отключенным инкрементальным удалением мусора. Затем вы можете сравнить оба захватов Profiler с пакетом Пакет Profile Analyzer. Для проектов, связанных с CPU, разница может составлять до 1 мс на кадр.

Дополнительные сведения об отключении сбора мусора см. в Режимы сбора мусора.

Использование GarbageCollector API

Вы можете использовать APIs в GarbageCollector класс, чтобы вручную управлять сборщиком мусора или полностью его отключить. Для управления сборщиком мусора доступны следующие API:

Отключение сборщика мусора

Чтобы полностью отключить сборщик мусора, установите GarbageCollector.GCMode на Disabled. Когда вы отключаете сборщик мусора, Unity не выполняет сбор мусора. Вызов System.GC.Collect не имеет никакого эффекта и не запускает сбор.

Отключение сборщика мусора предотвращает пики CPU, но использование памяти вашим приложением никогда не уменьшается, потому что сборщик мусора не собирает объекты, которые больше не имеют никаких ссылок.

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

В идеале, перед отключением сборщика мусора следует выделить всю память и избегать дополнительного выделения памяти, пока сборщик мусора отключен.

Запуск сборщика мусора вручную

Чтобы отключить автоматическое удаление мусора и вручную выбрать время его запуска, установите GarbageCollector.GCMode на Manual.

Это отключает автоматические вызовы сборщика мусора, но всё равно позволяет выполнять сбор мусора вручную. Ручной сбор позволяет вам контролировать, когда происходит сбор мусора, так что вы можете точно настроить плавность вашего контента или использование памяти. Вызов либо System.GC.Collect для полного, блокирующего сбора, либо GarbageCollector.CollectIncremental для выполнения постепенного сбора мусора.

Дополнительные ресурсы