Freigeben über


Garbage Collection für die Arbeitsstation und Garbage Collection auf dem Server

Der Garbage Collector optimiert sich selbst und kann in einer Vielzahl von Szenarien funktionieren. Sie können jedoch die Art der Garbage Collection anhand der Merkmale der Workload festlegen. Die CLR stellt mehrere Arten der Garbage Collection bereit:

  • Die Garbage Collection (GC) für Arbeitsstationen, die für Client-Apps konzipiert ist. Es ist der Standard-GC-Geschmack für eigenständige Apps. Bei gehosteten Apps, zum Beispiel solche, die von ASP.NET betrieben werden, bestimmt der Host die Standard-GC-Variante.

    Die Garbage Collection für die Arbeitsstation kann gleichzeitig oder nicht gleichzeitig erfolgen. Die gleichzeitige (oder im Hintergrund stattfindende) Garbage Collection ermöglicht, dass verwaltete Threads während einer Garbage Collection Vorgänge fortsetzen können. Die Hintergrund-Garbage-Collection ersetzt die gleichzeitige Garbage-Collection in .NET Framework 4 und späteren Versionen.

  • Server-Garbage-Collection, die für Serveranwendungen vorgesehen ist, die einen hohen Durchsatz und Skalierbarkeit benötigen.

    • In .NET Core kann die Garbage Collection auf dem Server nicht-gleichzeitig oder im Hintergrund ausgeführt werden.

    • In .NET Framework 4.5 und höher kann die Garbage Collection auf dem Server nicht-gleichzeitig oder im Hintergrund ausgeführt werden. In .NET Framework 4 und früheren Versionen erfolgt die Garbage Collection auf dem Server gleichzeitig.

Die folgende Abbildung zeigt die dedizierten Threads, die die Garbage Collection auf einem Server ausführen:

Threads für Garbage Collection auf dem Server

Leistungsüberlegungen

Arbeitsstation GC

Im Folgenden finden Sie Überlegungen zu Threading und Leistung der Garbage Collection auf Arbeitsstationen:

  • Die Garbage Collection erfolgt auf dem Benutzerthread, der die Garbage Collection ausgelöst hat, und die Priorität bleibt unverändert. Da Benutzerthreads in der Regel mit normaler Priorität ausgeführt werden, muss der Garbage Collector (der auf einem normalen Prioritätsthread ausgeführt wird) mit anderen Threads für die CPU-Zeit konkurrieren. (Threads, die nativen Code ausführen, werden bei der Garbage Collection für die Arbeitsstation bzw. auf dem Server nicht angehalten.)

  • Die Garbage Collection für die Arbeitsstation wird immer auf einem Computer verwendet, der nur eine logische CPU besitzt, unabhängig von der Konfigurationseinstellung.

Server-GC

Im Folgenden finden Sie Überlegungen zu Threading und Leistung der Garbage Collection auf Servern:

  • Die Sammlung erfolgt in mehreren dedizierten Threads. Unter Windows werden diese Threads auf THREAD_PRIORITY_HIGHEST Prioritätsebene ausgeführt.

  • Für jede logische CPU werden ein Heap und ein dedizierter Thread zur Durchführung der Garbage Collection bereitgestellt, und die Heaps werden gleichzeitig erfasst. Jeder Heap enthält einen kleinen Objektheap und einen Heap für große Objekte, und auf alle Heaps kann über Benutzercode zugegriffen werden. Objekte auf verschiedenen Heaps können aufeinander verweisen.

  • Da mehrere Garbage Collection-Threads zusammenarbeiten, ist die Garbage Collection auf dem Server bei gleicher Heapgröße schneller als die Garbage Collection für die Arbeitsstation.

  • Bei der Garbage Collection auf dem Server sind die Segmente häufig größer. Dies ist jedoch nur eine Generalisierung: Die Segmentgröße ist implementierungsspezifisch und kann geändert werden. Treffen Sie bei der Optimierung Ihrer App keine Annahmen über die Größe der vom Garbage Collector zugewiesenen Segmente.

  • Die Server-Speicherbereinigung kann ressourcenintensiv sein. Angenommen, es gibt 12 Prozesse, die server GC auf einem Computer mit vier logischen CPUs verwenden. Wenn alle Prozesse gleichzeitig Müll sammeln, würden sie sich gegenseitig stören, da 12 Threads auf derselben logischen CPU geplant wären. Wenn die Prozesse aktiv sind, ist es nicht ratsam, dass sie alle die Server-GC verwenden.

Wenn Sie Hunderte von Instanzen einer Anwendung ausführen, sollten Sie erwägen, eine Garbage Collection für die Arbeitsstation mit deaktivierter gleichzeitiger Garbage Collection zu verwenden. Dies führt zu einem geringeren Kontextwechsel, wodurch die Leistung verbessert werden kann.

Siehe auch