Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
public static Scripting.GarbageCollector.Mode GCMode;

Описание

Установить и получить режим работы глобального сборщика мусора.

Установка глобального режима работы изменяет поведение сборщика мусора для всего приложения.

Не поддерживается на платформе WebGL и в редакторе.

Рекомендуется изменять режим работы сборщика мусора только на уровне приложения и не изменять его в сторонних библиотеках.

Подпишитесь на событие GarbageCollector.GCModeChanged, чтобы получать уведомления об изменении режима сборщика мусора.

Отключение сборщика мусора
Отключение сборщика мусора путем назначения GarbageCollector.Mode.Disabled полностью отключает сборщик мусора. Это означает, что поток сборщика мусора никогда не остановит ваше приложение для выполнения сборки. Кроме того, вызов System.GC.Collect() не будет иметь никакого эффекта и не запустит сбор. Отключать сборщик мусора нужно с большой осторожностью, так как непрерывное выделение памяти после отключения сборщика мусора приведет к постоянному увеличению использования памяти.

Рекомендуется отключать сборщик мусора только для долгоживущих выделений. Например, в игре вы должны выделить всю необходимую память для уровня, а затем отключить сборщик мусора, чтобы избежать накладных расходов во время прохождения уровня. После завершения уровня и освобождения всей памяти можно снова включить сборщик мусора и вызвать System.GC.Collect() для освобождения памяти перед загрузкой следующего уровня.

Управление сборщиком мусора вручную
Вы можете установить для GCMode значение GarbageCollector.Mode.Manual. Это отключит автоматические вызовы сборщика мусора, но по-прежнему позволит вам вручную выполнять сборку мусора, вызывая либо System.GC.Collect() для полной блокирующей сборки, либо GarbageCollection.CollectIncremental для выполнения добавочной сборки мусора. Это позволяет вам взять на себя контроль над тем, когда происходят сборы, что может позволить вам точно настроить плавность вашего контента или использование вашей памяти.

Смотрите так же: GarbageCollector.Mode.Enabled, GarbageCollector.Mode.Disabled, GarbageCollector.Mode.Manual.

using System; using UnityEngine; using UnityEngine.Scripting; public class GarbageCollectorExample { static void ListenForGCModeChange() { // Listen on garbage collector mode changes. GarbageCollector.GCModeChanged += (GarbageCollector.Mode mode) => { Debug.Log("GCModeChanged: " + mode); }; } static void LogMode() { Debug.Log("GCMode: " + GarbageCollector.GCMode); } static void EnableGC() { GarbageCollector.GCMode = GarbageCollector.Mode.Enabled; // Trigger a collection to free memory. GC.Collect(); } static void DisableGC() { GarbageCollector.GCMode = GarbageCollector.Mode.Disabled; } }

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

using System; using UnityEngine; using UnityEngine.Profiling; using UnityEngine.Scripting; public class GCManualControl : MonoBehaviour { // Perform an incremental collection every time we allocate more than 8 MB const long kCollectAfterAllocating = 8 * 1024 * 1024; // Perform an instant, full GC if we have more than 128 MB of managed heap. const long kHighWater = 128 * 1024 * 1024; long lastFrameMemory = 0; long nextCollectAt = 0; void Start() { // Set GC to manual collections only. GarbageCollector.GCMode = GarbageCollector.Mode.Manual; } void Update() { long mem = Profiler.GetMonoUsedSizeLong(); if (mem < lastFrameMemory) { // GC happened. nextCollectAt = mem + kCollectAfterAllocating; } if (mem > kHighWater) { // Trigger immediate GC System.GC.Collect(0); } else if (mem >= nextCollectAt) { // Trigger incremental GC UnityEngine.Scripting.GarbageCollector.CollectIncremental(); lastFrameMemory = mem + kCollectAfterAllocating; } lastFrameMemory = mem; } }

Ручное управление сборщиком мусора с помощью GarbageCollector.Mode.Manual.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3