Latenzmodi

Um Objekte freizugeben, muss der Garbage Collector alle ausgeführten Threads einer Anwendung beenden. In einigen Situationen, z. B. wenn eine Anwendung Daten abruft oder Inhalte anzeigt, kann eine vollständige Garbage Collection zu einem kritischen Zeitpunkt stattfinden und die Leistung beeinträchtigen. Sie können das Ausmaß der Garbage Collection anpassen, indem Sie die GCSettings.LatencyMode-Eigenschaft auf einen der System.Runtime.GCLatencyMode-Werte festlegen.

Der Begriff Latenz bezieht sich auf die Zeit, während der der Garbage Collector in die Anwendung eingreift. In Zeiten mit geringer Latenz verhält sich der Garbage Collector bei der Freigabe von Objekten zurückhaltender und weniger intrusiv. Daher empfiehlt es sich, den GCLatencyMode.LowLatency-Modus nur so lange zu verwenden, wie Sie ihn benötigen. Andernfalls kann bei unzureichendem Speicherplatz eine Garbage Collection ausgelöst werden, durch die die Anwendung möglicherweise kurz angehalten und ein zeitkritischer Vorgang unterbrochen wird.

In Zeiten mit geringer Latenz werden Garbage Collections in Generation 2 unterdrückt, außer wenn Folgendes auftritt:

  • Das System empfängt vom Betriebssystem eine Benachrichtigung über unzureichenden Arbeitsspeicher.

  • Der Anwendungscode initiiert eine Garbage Collection, indem die GC.Collect-Methode aufgerufen und für den generation-Parameter der Wert "2" angegeben wird.

Sie sollten den Latenzmodus für Anwendungen verwenden, die einen Codeblock enthalten, der über eine kurze Dauer ausgeführt wird und nur minimal von der Laufzeit unterbrochen werden darf. Obgleich der LowLatency-Modus für die Verwendung in Szenarios mit gewissen zeitlichen Einschränkungen vorgesehen ist, so eignet er sich doch nicht für Szenarios, in denen strikte Zeitvorgaben einzuhalten sind.

In der folgenden Tabelle werden die Anwendungsszenarien aufgelistet, für die die GCLatencyMode-Werte gültig sind.

Latenzmodus

Anwendungsszenarios

Batch

Für Anwendungen ohne Benutzeroberfläche oder serverseitige Vorgänge.

Interactive

Für die meisten Anwendungen mit Benutzeroberfläche.

LowLatency

Für Anwendungen mit kurzen, zeitkritischen Vorgängen, bei denen Unterbrechungen durch den Garbage Collector störend sein können. Hierzu gehören zum Beispiel Anwendungen, die Funktionen für Animationsrendering oder Datenerfassung ausführen.

Standardmodi der Garbage Collection

Wenn die LatencyMode-Eigenschaft nicht angegeben wird, ist der Standardmodus die gleichzeitige Garbage Collection für die Arbeitsstation. Der Modus ist vom Wert zweier Laufzeitkonfigurationseinstellungen abhängig:

  • <gcConcurrent>

    Wenn diese Einstellung aktiviert ist, führt die Common Language Runtime die Garbage Collection der Arbeitsstation in einem separaten Thread aus, um gleichzeitige Vorgänge zu ermöglichen. Diese Einstellung ist standardmäßig aktiviert.

  • <gcServer>

    Wenn diese Einstellung aktiviert ist, führt die Common Language Runtime die Garbage Collection für Server aus. Andernfalls wird die Garbage Collection für die Arbeitsstation ausgeführt. Die Garbage Collection für Server kann nur auf Computern mit mindestens zwei Prozessoren aktiviert werden. Sie ist nicht standardmäßig aktiviert.

    Wenn diese Einstellung aktiviert ist, wird <gcConcurrent> automatisch deaktiviert.

Die Standardwerte für GCLatencyMode sind:

  • Interactive, wenn <gcConcurrent> aktiviert und <gcServer> deaktiviert wird.

  • Batch, wenn <gcConcurrent> deaktiviert oder <gcServer> aktiviert ist.

HinweisHinweis

Die gleichzeitige Garbage Collection wird nicht in Anwendungen unterstützt, die den WOW64 x86-Emulator auf 64-Bit-Systemen mit einer Implementierung der Intel Itanium-Architektur (früher als IA-64 bezeichnet) ausführen.

Richtlinien für die Verwendung von geringer Latenz

Wenn Sie den LowLatency-Modus verwenden, sollten Sie die folgenden Richtlinien beachten:

  • Halten Sie die Zeiten mit geringer Latenz möglichst kurz.

  • Vermeiden Sie es, in Zeiten mit geringer Latenz große Speichermengen zu belegen. Benachrichtigungen über unzureichenden Speicherplatz können ausgegeben werden, da die Garbage Collection weniger Objekte freigibt.

  • Minimieren Sie im Modus für geringe Latenz die Anzahl der Zuordnungen, insbesondere Zuordnungen für den großen Objektheap und fixierte Objekte.

  • Achten Sie auf potenziell zuordnende Threads. Da die LatencyMode-Eigenschaft prozessweit gültig ist, könnte auf jedem potenziell zuordnenden Thread eine OutOfMemoryException ausgelöst werden.

  • Umschließen Sie den Code mit geringer Latenz mit eingeschränkten Ausführungsbereichen (weitere Informationen finden Sie unter Eingeschränkte Ausführungsbereiche (CERs)).

  • Sie können Garbage Collections der Generation 2 in Zeiten mit geringer Latenz erzwingen, indem Sie die GC.Collect(Int32, GCCollectionMode)-Methode aufrufen.

Siehe auch

Aufgaben

Gewusst wie: Deaktivieren von gleichzeitigen Garbage Collection-Vorgängen

Konzepte

Indizierte Auflistungen

Weitere Ressourcen

Garbage Collection