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

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

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

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

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


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

3 ответов


похоже, что разница между обычными (Рабочая станция) и параллельными (сервер) стратегиями сбора мусора. В основном подход рабочей станции сталкивается с проблемами во многих экстремальных случаях. И массово многопоточные сценарии (например, веб-серверы 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). Он также может включать некоторые измененные выделения памяти стратегии, позволяющие избежать таких проблем, как дефрагментация. В любом случае фактическая коллекция по своей природе должна работать однопоточно, останавливать все управляемые потоки и ограничиваться скоростью памяти, а не скоростью процессора.


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

https://msdn.microsoft.com/en-us/library/ms229357 (v=против 110).aspx

среда CLR поддерживает два типа сбора мусора: сбор мусора рабочей станции, доступный во всех системах, и сбор мусора сервера, доступный в многопроцессорных системах. Элемент используется для управления типом сборки мусора, выполняемой средой CLR. Используйте GCSettings.Собственность IsServerGC в определить, если свойства. Для однопроцессорных компьютеров сбор мусора рабочей станции по умолчанию должен быть самым быстрым вариантом. Для двухпроцессорных компьютеров можно использовать как рабочую станцию, так и сервер. Сбор мусора сервера должен быть самым быстрым вариантом для более чем двух процессоров. Этот элемент можно использовать только в файле конфигурации приложения; он игнорируется, если он находится в файле конфигурации компьютера.


, когда миграция по на 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