wake-up-neo.net

Was ist eine Server-Garbage-Collection in ASP.NET Core?

Ich habe ein ASP.NET Core-Projekt auf VS2017 und das neue csproj aktualisiert, und es gibt folgende Option:

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

Was ist eine Server Garbage Collection? Es gibt keine richtige Dokumentation, nur einen Migrationsleitfaden , der voraussetzt, dass Sie bereits wissen, was es ist.

(Sofern es kein formelles Dokument gibt, lassen Sie es mich wissen.)


Zusammenfassung: Leider sind in den Dokumenten für einen Großteil der zugrunde liegenden Technologien keine Details enthalten. @ PanagiotisKanavos 'Link hat jedoch das wichtige Bit "Server gc" hier .

21
grokky

Es scheint der Unterschied zwischen normalen (Workstation) und gleichzeitigen (Server) Garbage Collection-Strategien zu sein. Grundsätzlich stößt der Workstation-Ansatz in vielen Extremfällen auf Probleme. Massively Multithreaded-Szenarien (wie ASP Webserver) sind Paradebeispiele für einen solchen Extremfall:

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

Beachten Sie, dass Concurrent GC natürliche Probleme mit schwachen Verweisen und Defragmentierung aufweist. Wenn dies jedoch für die .NET Core-Implementierung gilt, liegt dies außerhalb meines Wissens. Das .NET Core-Team könnte alle möglichen Verbesserungen am Code vornehmen, und dies betrifft den Entwurf eines GC-Speichermanagers.

Möglicherweise wird nur festgelegt, wie viele gleichzeitige Threads für den Tagging-Teil verwendet werden (wobei der Standardwert für die Workstation 1 ist). Es kann auch einige geänderte Speicherzuweisungsstrategien enthalten, um Probleme wie die Defragmentierung zu vermeiden .. In beiden Fällen muss die eigentliche Erfassung von Natur aus Singlethread ausführen, alle verwalteten Threads anhalten und wird durch die Speichergeschwindigkeit und nicht durch die CPU-Geschwindigkeit begrenzt.

13
Christopher

msdn Dokumentation ... 

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

Die Common Language Runtime (CLR) unterstützt zwei Arten der Speicherbereinigung: Die Arbeitsstationsspeicherbereinigung, die auf allen Systemen verfügbar ist, und die Server-Speicherbereinigung, die auf Multiprozessorsystemen verfügbar ist. Mit diesem Element steuern Sie die Art der Garbage Collection, die die CLR durchführt. Verwenden Sie die GCSettings.IsServerGC-Eigenschaft, um zu ermitteln, ob die Server-Garbage Collection aktiviert ist .. Für Computer mit einem Prozessor sollte die standardmäßige Workstation-Garbage Collection die schnellste Option sein. Workstation oder Server können für Computer mit zwei Prozessoren verwendet werden. Die Server Garbage Collection sollte die schnellste Option für mehr als zwei Prozessoren sein .. _ Dieses Element kann nur in der Anwendungskonfigurationsdatei verwendet werden. Es wird ignoriert, wenn es sich in der Konfigurationsdatei des Computers befindet.

6
wels1200

Wenn über migriert wird, bildet die ServerGarbageCollection den System.GC.Server ab.

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

Was ist eine Server Garbage Collection?

Es handelt sich einfach um einen Konfigurationswert, der die .net-Laufzeitumgebung anweist, eine Server-Garbage Collection durchzuführen. Historisch dies wurde vom project.json verwaltet. Es aktiviert/deaktiviert die Server Garbage Collection.

Dies ist so nah an einem offiziellen Dokument, das Sie finden werden, es ist eine Ankündigung über das Hinzufügen dieser Option in den project.json.

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

Ebenso weitere Details hier:

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

5
David Pine

Es schaltet GC zwischen Server (mehr als 1 Prozessor) oder Workstation (1 Prozessor) um.

1
Shadi Namrouti