Konfigurieren der Garbage Collection in .NET

Für eine gute Leistung ist es wichtig, die Garbage Collection in .NET für den Siloprozess richtig zu konfigurieren. Laut Erkenntnissen des Teams besteht die beste Kombination von Einstellungen bei gcServer=true und gcConcurrent=true. Sie können diese Werte im C#-Projekt (CSPROJ) oder in einer app.config konfigurieren. Weitere Informationen finden Sie unter Varianten der Garbage Collection.

.NET Core und .NET 5 und höher

Diese Methode wird bei Projekten im SDK-Stil nicht unterstützt, die für das vollständige .NET Framework kompiliert werden.

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

.NET Framework

Projekte im SDK-Stil, die für das vollständige .NET Framework kompiliert werden, sollten dennoch weiterhin diese Konfigurationsart verwenden. Sehen Sie sich eine beispielhafte app.config-XML-Datei an:

<configuration>
    <runtime>
        <gcServer enabled="true"/>
        <gcConcurrent enabled="true"/>
    </runtime>
</configuration>

Dies ist jedoch nicht so einfach, wenn ein Silo als Teil einer Azure-Workerrolle ausgeführt wird, die standardmäßig für die Verwendung der Arbeitsstations-GC konfiguriert ist. Es gibt einen relevanten Blogbeitrag, in dem erläutert wird, wie Sie die gleiche Konfiguration für eine Azure-Workerrolle festlegen, siehe Server garbage collection mode in Azure.

Wichtig

Die Server-Garbage-Collection ist nur auf Computern mit mehreren Prozessoren verfügbar. Selbst wenn Sie die Garbage Collection entweder über die CSPROJ-Datei der Anwendung oder über die Skripts im genannten Blogbeitrag konfigurieren, können Sie daher nicht die Vorteile von gcServer=true nutzen, wenn das Silo auf einem (virtuellen) Computer mit einem Single-Core ausgeführt wird. Weitere Informationen finden Sie unter GCSettings.IsServerGC-Hinweise.