Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um Objekte zurückzufordern, muss der Garbage Collector (GC) alle ausgeführten Threads in einer Anwendung beenden. Der Zeitraum, in dem der Garbage Collector aktiv ist, wird als dessen Latenz bezeichnet.
In einigen Situationen, z. B. wenn eine Anwendung Daten abruft oder Inhalte anzeigt, kann eine vollständige Garbage Collection zu einem kritischen Zeitpunkt erfolgen und die Leistung beeinträchtigen. Sie können die Aufdringlichkeit des Garbage Collectors anpassen, indem Sie die GCSettings.LatencyMode Eigenschaft auf einen der System.Runtime.GCLatencyMode Werte festlegen.
Einstellungen für niedrige Latenz
Die Verwendung einer Einstellung mit niedriger Latenz bedeutet, dass der Garbage Collector weniger in Ihre Anwendung eindringt. Die Garbage Collection ist bei der Freigabe von Arbeitsspeicher eher konservativ.
Die System.Runtime.GCLatencyMode Enumeration bietet zwei Einstellungen für niedrige Latenz:
GCLatencyMode.LowLatency unterdrückt Auflistungen der Generation 2 und führt nur Auflistungen der Generation 0 und 1 durch. Sie kann nur für kurze Zeiträume verwendet werden. Über längere Zeiträume (und wenn auf dem System nicht genügend Arbeitsspeicher vorhanden ist) löst der Garbage Collector eine Auflistung aus, die die Anwendung kurz anhalten und einen zeitkritischen Vorgang unterbrechen kann. Diese Einstellung ist nur für die Müllabfuhr der Workstation verfügbar.
GCLatencyMode.SustainedLowLatency unterdrückt Garbage Collections der 2. Generation im Vordergrund und führt nur Garbage Collections der Generationen 0 und 1 sowie Collections der Generation 2 im Hintergrund aus. Sie kann für längere Zeiträume verwendet werden und ist sowohl für die Workstation als auch für die Server-Garbage-Collection verfügbar. Diese Einstellung kann nicht verwendet werden, wenn die Garbage Collection im Hintergrund deaktiviert ist.
In Phasen mit geringer Latenz werden Sammlungen der Generation 2 unterdrückt, es sei denn, eines der folgenden Ereignisse eintritt:
Das System empfängt eine Benachrichtigung über geringen Arbeitsspeicher vom Betriebssystem.
Der Anwendungscode löst eine Auflistung aus, indem er die GC.Collect Methode aufruft und 2 als Wert für den
generationParameter angibt.
Szenarien
In der folgenden Tabelle sind die Anwendungsszenarien für die Verwendung der GCLatencyMode Werte aufgeführt:
| Latenzmodus | Anwendungsszenarien |
|---|---|
| Batch | Für Anwendungen ohne Benutzeroberfläche oder serverseitige Operationen. Wenn Garbage Collection im Hintergrund deaktiviert ist, ist dies der Standardmodus für die Garbage Collection auf Arbeitsstationen und Servern. Der Batch-Modus setzt außerdem die gcConcurrent-Einstellung außer Kraft, d.h., er verhindert parallele oder im Hintergrund ausgeführte Garbage Collection. |
| Interactive | Für die meisten Anwendungen, die über eine Benutzeroberfläche verfügen. Dies ist der Standardmodus für die Garbage Collection auf Arbeitsstationen und Servern. Wenn jedoch eine App gehostet wird, haben die Garbage Collector-Einstellungen des Hostingprozesses Vorrang. |
| LowLatency | Bei Anwendungen mit kurzfristigen, zeitempfindlichen Vorgängen, bei denen Unterbrechungen des Garbage Collector störend sein könnten. Beispielsweise Anwendungen, die Animationen oder Datenerfassungsfunktionen rendern. |
| SustainedLowLatency | Für Anwendungen mit zeitkritischen Vorgängen während eines begrenzten, aber potenziell längeren Zeitraums, während dessen Unterbrechungen durch den Garbage Collector störend sein könnten. Beispielsweise Anwendungen, die schnelle Reaktionszeiten benötigen, während sich Marktdaten während der Handelszeiten ändern. Dieser Modus führt zu einer größeren verwalteten Heap-Größe als anderen Modi. Da der verwaltete Heap nicht komprimiert wird, ist eine stärkere Fragmentierung möglich. Stellen Sie sicher, dass genügend Arbeitsspeicher verfügbar ist. |
Richtlinien für die Verwendung von geringer Latenz
Wenn Sie den GCLatencyMode.LowLatency-Modus verwenden, beachten Sie die folgenden Richtlinien:
Halten Sie den Zeitraum in geringer Latenz so kurz wie möglich.
Vermeiden Sie die Zuordnung hoher Speichermengen während geringer Wartezeiten. Benachrichtigungen über unzureichenden Arbeitsspeicher können ausgegeben werden, wenn die Garbage Collection weniger Objekte freigibt.
Minimieren Sie im Modus für geringe Latenz die Anzahl neuer Zuordnungen, insbesondere Zuordnungen für den großen Objektheap und fixierte Objekte.
Achten Sie auf potenziell zuordnende Threads. Weil die Einstellung der LatencyMode-Eigenschaft prozessweit gültig ist, können in jedem zuordnenden Thread OutOfMemoryException-Ausnahmen generiert werden.
Umschließen (wrappen) Sie den Code für geringe Latenz in eingeschränkten Ausführungsbereichen. Weitere Informationen finden Sie unter Eingeschränkte Ausführungsbereiche.
Sie können Sammlungen der Generation 2 während eines Zeitraums mit geringer Latenz erzwingen, indem Sie die GC.Collect(Int32, GCCollectionMode) Methode aufrufen.