Что такое сборка мусора сервера в ASP.NET Core?

Я обновил проект ASP.NET Core до VS2017 и нового csproj, и есть эта опция:

<PropertyGroup>
    <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>

Что такое сборка мусора сервера? Нет надлежащей документации, просто руководство по миграции, которое предполагает, что вы уже знаете, что это такое.

(Если есть формальный документ, в этом случае, пожалуйста, дайте мне знать.)


Резюме. К сожалению, в документах нет подробных данных для большинства основных технологий. Однако ссылка @PanagiotisKanavos имеет важный бит о "server gc" здесь.

Ответы

Ответ 1

Кажется, что есть разница между обычными (рабочая станция) и параллельными (сервер) стратегиями сбора мусора. В основном подход рабочей станции сталкивается с проблемами во многих крайних случаях. И массовые многопоточные сценарии (например, ASP веб-серверы) являются яркими примерами такого экстремального случая:

https://social.msdn.microsoft.com/Forums/en-US/286d8c7f-87ca-46b9-9608-2b559d7dc79f/garbage-collection-pros-and-limits?forum=csharpgeneral

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

Может быть, он только определяет, сколько параллельных потоков будет использовано для теговой части (с рабочей станцией по умолчанию 1). Он также может включать некоторые модифицированные стратегии выделения памяти, чтобы избежать таких проблем, как дефрагментация. В любом случае фактическая коллекция по своей природе должна будет запускаться однопоточно, останавливать все управляемые потоки и будет ограничена скоростью памяти, а не скоростью процессора.

Ответ 2

документация MSDN...

https://msdn.microsoft.com/en-us/library/ms229357(v=vs.110).aspx

Общеязыковая среда выполнения (CLR) поддерживает два типа мусора collection: сборка мусора на рабочей станции, которая доступна на всех системы и серверная сборка мусора, которая доступна на многопроцессорные системы. Вы используете элемент для управления тип сборки мусора, который выполняет CLR. Использовать GCSettings.IsServerGC свойство, чтобы определить, является ли мусор сервера коллекция включена.

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

Этот элемент может использоваться только в файле конфигурации приложения; он игнорируется, если он находится в файле конфигурации машины.

Ответ 3

При миграции черезServerGarbageCollection отображается из System.GC.Server.

<PropertyGroup>
  <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>

Что такое сборка мусора на сервере?

Проще говоря, это значение конфигурации, которое указывает среде выполнения .net выполнять сборку мусора на сервере. Исторически этим управлял project.json. Включает/отключает сборку мусора на сервере.

Это как можно ближе к официальному документу, который вы собираетесь найти, это объявление о добавлении этой опции в project.json.

https://github.com/aspnet/Announcements/issues/175

Кроме того, дополнительные детали здесь:

https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/clr-configuration-knobs.md#host-configuration-knobs

Ответ 4

Он переключает GC между сервером (более 1 процессора) или рабочей станцией (1 процессор).