Сборка мусора рабочей станции и сборка мусора сервера

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

  • Сборка мусора на рабочей станции выполняется для клиентских приложений. Это вариант по умолчанию для автономных приложений. Для размещенных приложений, например размещаемых в ASP.NET, разновидность сборки мусора по умолчанию определяется узлом.

    Сборка мусора рабочей станции может быть параллельной или непараллельной. Параллельная (или фоновая) сборка мусора позволяет управляемым потокам продолжать операции во время этого процесса. В .NET Framework 4 и более поздних версиях фоновая сборка мусора заменяет параллельную сборку мусора.

  • Сборка мусора сервера, предназначенная для серверных приложений, которым нужны высокое быстродействие и масштабируемость.

    • В .NET Core серверная сборка мусора может быть непараллельной или фоновой.

    • В .NET Framework 4.5 и более поздних версий сборка мусора на сервере может быть непараллельной или фоновой. В .NET Framework 4 и более ранних версиях серверная сборка мусора является непараллельной.

На рисунке ниже показаны выделенные потоки, выполняющие сборку мусора на сервере.

Потоки сборки мусора сервера

Особенности производительности

Сборщик мусора рабочей станции

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

  • Сборка выполняется для пользовательского потока, запустившего сборку мусора, и сохраняет тот же приоритет. Так как пользовательские потоки обычно выполняются с обычным приоритетом, сборщик мусора (выполняемый для потока с обычным приоритетом) должен конкурировать с другими потоками за время процессора. (Потоки, выполняющие машинный код, не приостанавливаются ни при серверной сборке мусора, ни при сборке мусора рабочей станции.)

  • Для компьютера с одним процессором всегда используется сборка мусора рабочей станции, независимо от параметра конфигурации.

Сборщик мусора сервера

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

  • Сборка выполняется в нескольких выделенных потоках, выполняемых с приоритетом THREAD_PRIORITY_HIGHEST .

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

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

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

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

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

См. также