Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В большинстве случаев сборщик мусора может определить лучшее время для выполнения коллекции, и вы должны позволить ему работать независимо. Существуют редкие ситуации, когда принудительные коллекции могут повысить производительность приложения. В таких случаях можно вызвать сборку мусора с помощью GC.Collect метода принудительной сборки мусора.
GC.Collect Используйте этот метод, если в коде приложения значительно сокращается объем памяти. Например, если приложение использует сложное диалоговое окно с несколькими элементами управления, вызывая Collect при закрытии диалогового окна, может повысить производительность, немедленно освободив память, используемую диалоговым окном. Убедитесь, что ваше приложение не слишком часто инициирует сбор мусора, так как это может снизить производительность, если сборщик мусора пытается восстановить объекты в неоптимальное время. Значение перечисления GCCollectionMode.Optimized можно предоставить методу Collect, чтобы коллекция происходила только в том случае, если она будет эффективной, как описано в следующем разделе.
Режим сборки мусора GC
Можно использовать одну из GC.Collect перегрузок метода, которая включает значение GCCollectionMode, чтобы указать поведение принудительной коллекции следующим образом.
Значение GCCollectionMode |
Описание |
---|---|
Default | Использует параметр сборки мусора по умолчанию для работающей версии .NET. |
Forced | Принудительно выполняется сборка мусора немедленно. Это то же самое, что и вызов перегрузки GC.Collect(). Это приводит к полной блокировке коллекции всех поколений. Кроме того, можно сжать кучу больших объектов, установив для свойства GCSettings.LargeObjectHeapCompactionMode значение GCLargeObjectHeapCompactionMode.CompactOnce перед принудительной полной блокирующей сборкой мусора. |
Optimized | Позволяет сборщику мусора определить, является ли текущее время оптимальным для освобождения объектов. Сборщик мусора может определить, что сборка не будет достаточно продуктивной, чтобы ее обосновать, и в этом случае он вернётся, не освобождая объекты. |
Фоновые или блокирующие коллекции
Можно вызвать перегрузку GC.Collect(Int32, GCCollectionMode, Boolean) метода, чтобы указать, блокируется ли вызываемая коллекция. Тип выполняемой коллекции зависит от сочетания параметров метода mode
и blocking
.
mode
является членом GCCollectionMode перечисления и blocking
является значением Boolean . В следующей таблице приводится сводка взаимодействия аргументов mode
и blocking
.
mode |
blocking = true |
blocking = false |
---|---|---|
Forced или Default | Блокировка коллекции выполняется как можно скорее. Если фоновая коллекция выполняется и поколение равно 0 или 1, метод Collect(Int32, GCCollectionMode, Boolean) немедленно инициирует блокирующую коллекцию и возвращается после завершения коллекции. Если фоновая сборка выполняется и параметр generation равен 2, метод ожидает завершения фоновой сборки, выполняет блокирующую сборку поколения 2, а затем возвращается. |
Сбор проводится как можно скорее. Метод Collect(Int32, GCCollectionMode, Boolean) запрашивает фоновую коллекцию, но это не гарантируется. В зависимости от обстоятельств может по-прежнему выполняться блокирующая коллекция. Если фоновая коллекция уже выполняется, метод возвращается немедленно. |
Optimized | Блокировка может выполняться в зависимости от состояния сборщика мусора и generation параметра. Сборщик мусора пытается обеспечить оптимальную производительность. |
Сборка может выполняться в зависимости от состояния сборщика мусора. Метод Collect(Int32, GCCollectionMode, Boolean) запрашивает фоновую коллекцию, но это не гарантируется. В зависимости от обстоятельств может по-прежнему выполняться блокирующая коллекция. Сборщик мусора пытается обеспечить оптимальную производительность. Если фоновая коллекция уже выполняется, метод возвращается немедленно. |