Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В фоновой сборке мусора (GC) короткоживущие поколения (0 и 1) собираются по мере необходимости, пока выполняется сбор поколения 2. Фоновая сборка мусора выполняется на одном или нескольких выделенных потоках в зависимости от того, относится ли она к рабочей станции или серверной сборке мусора, и применяется только к коллекциям поколения 2.
Фоновый сбор мусора включен по умолчанию. Его можно включить или отключить с помощью параметра конфигурации gcConcurrent в приложениях .NET Framework или параметра System.GC.Parallel в .NET Core и .NET 5 и более поздних версиях приложений.
Замечание
Фоновая сборка мусора заменяет параллельную сборку мусора и доступна в .NET Framework 4 и более поздних версиях. В .NET Framework 4 она поддерживается только для сборки мусора рабочей станции . Начиная с .NET Framework 4.5 фоновая сборка мусора доступна как для рабочей станции, так и для сервера.
Коллекция эпемеральных поколений во время фонового сбора мусора называется сборкой мусора переднего плана. При возникновении сборок мусора переднего плана все управляемые потоки приостанавливаются.
При выполнении фоновой сборки мусора и когда вы выделили достаточно объектов в поколении 0, CLR выполняет сборку мусора переднего плана поколения 0 или поколения 1. Выделенный поток фоновой сборки мусора проверяется на частых безопасных точках, чтобы определить, есть ли запрос на сборку мусора переднего плана. Если это так, фоновая коллекция приостанавливается, чтобы могла происходить основная сборка мусора. После завершения сборки мусора переднего плана выделенные потоки фоновой сборки мусора и пользовательские потоки возобновляются.
Фоновая сборка мусора удаляет ограничения выделения, введенные параллельной сборкой мусора, так как временные сборки мусора могут возникать во время фоновой сборки мусора. Фоновая сборка мусора может удалять мертвые объекты в короткоживущих поколениях. Он также может расширить кучу, если это необходимо, во время сборки мусора первого поколения.
Фоновая рабочая станция и серверная сборка данных
Начиная с .NET Framework 4.5, фоновая сборка мусора стала доступна для серверного режима уборки мусора. Фоновый GC — это режим по умолчанию для сборки мусора сервера.
Фоновая сборка мусора на сервере работает аналогично фоновой сборке мусора на рабочей станции, но есть несколько различий.
В фоновой сборке мусора на рабочей станции используется один выделенный поток, а в фоновой сборке мусора на сервере используется несколько потоков. Как правило, для каждого логического процессора существует выделенный поток.
В отличие от потока фоновой сборки мусора на рабочей станции, потоки фоновой сборки мусора на сервере не истекают.
На следующем рисунке показана сборка мусора фоновой рабочей станции , выполняемая в отдельном выделенном потоке:
На следующем рисунке показана сборка мусора фонового сервера , выполняемая на отдельных выделенных потоках:
Параллельная сборка мусора
Подсказка
Этот раздел относится к:
- .NET Framework 3.5 и более ранние версии для сбора мусора в рабочих станциях
- .NET Framework 4 и более ранние версии для серверного сборщика мусора
В более поздних версиях одновременная сборка мусора заменяется фоновой.
В сборке мусора на рабочей станции или сервере можно включить параллельную сборку мусора, которая позволяет потокам выполняться параллельно с выделенным потоком, выполняющим сборку мусора в течение большей части процесса. Этот параметр влияет только на сборки мусора в поколении 2; поколения 0 и 1 всегда не одновременны, потому что они завершаются быстро.
Конкурентная сборка мусора позволяет интерактивным приложениям быть более отзывчивыми, сокращая паузы на сборку. Управляемые потоки могут продолжать работать большую часть времени, пока выполняется параллельный поток сборки мусора. Эта конструкция приводит к более коротким приостановкам во время сборки мусора.
Параллельная сборка мусора выполняется в выделенном потоке. По умолчанию среда CLR запускает сборку мусора рабочей станции с поддержкой параллельной сборки мусора на компьютерах с одним процессором и несколькими процессорами.
На следующем рисунке показана параллельная сборка мусора, выполняемая в отдельном выделенном потоке.