LatenzmodiLatency Modes

Zum Freigeben von Objekten muss der Garbage Collector alle ausgeführten Threads einer Anwendung beenden.To reclaim objects, the garbage collector must stop all the executing threads in an application. 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.In some situations, such as when an application retrieves data or displays content, a full garbage collection can occur at a critical time and impede performance. Sie können das Ausmaß der Garbage Collection anpassen, indem Sie die GCSettings.LatencyMode-Eigenschaft auf einen der System.Runtime.GCLatencyMode-Werte festlegen.You can adjust the intrusiveness of the garbage collector by setting the GCSettings.LatencyMode property to one of the System.Runtime.GCLatencyMode values.

Der Begriff Latenz bezieht sich auf die Zeit, während der der Garbage Collector in die Anwendung eingreift.Latency refers to the time that the garbage collector intrudes in your application. In Zeiten mit geringer Latenz verhält sich der Garbage Collector bei der Freigabe von Objekten zurückhaltender und weniger intrusiv.During low latency periods, the garbage collector is more conservative and less intrusive in reclaiming objects. Die System.Runtime.GCLatencyMode-Enumeration bietet zwei Einstellungen mit geringer Latenz:The System.Runtime.GCLatencyMode enumeration provides two low latency settings:

  • LowLatency unterdrückt Garbage Collections der Generation 2 und führt nur Garbage Collections der Generationen 0 und 1 aus.LowLatency suppresses generation 2 collections and performs only generation 0 and 1 collections. Diese Einstellung kann nur für kurze Zeiträume verwendet werden.It can be used only for short periods of time. Ü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.Over longer periods, if the system is under memory pressure, the garbage collector will trigger a collection, which can briefly pause the application and disrupt a time-critical operation. Diese Einstellung ist nur für die Garbage Collection auf Arbeitsstationen verfügbar.This setting is available only for workstation garbage collection.

  • SustainedLowLatency unterdrückt Garbage Collections der Generation 2 im Vordergrund und führt nur Garbage Collections der Generationen 0 und 1 sowie Garbage Collections der Generation 2 im Hintergrund aus.SustainedLowLatency suppresses foreground generation 2 collections and performs only generation 0, 1, and background generation 2 collections. Diese Einstellung kann für längere Zeiträume verwendet werden und ist für die Garbage Collection für die Arbeitsstation und für die Garbage Collection auf dem Server verfügbar.It can be used for longer periods of time, and is available for both workstation and server garbage collection. Diese Einstellung kann nicht verwendet werden, wenn die gleichzeitige Garbage Collection deaktiviert ist.This setting cannot be used if concurrent garbage collection is disabled.

In Zeiten mit geringer Latenz werden Garbage Collections der Generation 2 unterdrückt, außer wenn Folgendes geschieht:During low latency periods, generation 2 collections are suppressed unless the following occurs:

  • Das System erhält vom Betriebssystem eine Benachrichtigung über unzureichenden Arbeitsspeicher.The system receives a low memory notification from the operating system.

  • Der Anwendungscode initiiert eine Garbage Collection, indem die GC.Collect-Methode aufgerufen und für den generation-Parameter der Wert "2" angegeben wird.Your application code induces a collection by calling the GC.Collect method and specifying 2 for the generation parameter.

In der folgenden Tabelle werden die Anwendungsszenarien für die Verwendung der GCLatencyMode-Werte aufgeführt.The following table lists the application scenarios for using the GCLatencyMode values.

LatenzmodusLatency mode AnwendungsszenarienApplication scenarios
Batch Für Anwendungen ohne Benutzeroberfläche oder serverseitige Vorgänge.For applications that have no UI or server-side operations.

Dies ist der Standardmodus, wenn die gleichzeitige Garbage Collection deaktiviert ist.This is the default mode when concurrent garbage collection is disabled.
Interactive Für die meisten Anwendungen, die über eine Benutzeroberfläche verfügen.For most applications that have a UI.

Dies ist der Standardmodus, wenn die gleichzeitige Garbage Collection aktiviert ist.This is the default mode when concurrent garbage collection is enabled.
LowLatency Für Anwendungen mit kurzen, zeitkritischen Vorgängen, bei denen Unterbrechungen durch den Garbage Collector störend sein könnten.For applications that have short-term, time-sensitive operations during which interruptions from the garbage collector could be disruptive. Hierzu gehören beispielsweise Anwendungen, die Animationsrendering- oder Datenerfassungsfunktionen ausführen.For example, applications that do animation rendering or data acquisition functions.
SustainedLowLatency Für Anwendungen mit zeitkritischen Vorgängen über einen möglicherweise längeren Zeitraum, bei denen Unterbrechungen durch den Garbage Collector störend sein könnten.For applications that have time-sensitive operations for a contained but potentially longer duration of time during which interruptions from the garbage collector could be disruptive. Hierzu gehören beispielsweise Anwendungen, die schnelle Antwortzeiten bei Marktdatenänderungen während der Geschäftszeit erfordern.For example, applications that need quick response times as market data changes during trading hours.

Dieser Modus führt im Vergleich zu anderen Modi zu einem größeren verwalteten Heap.This mode results in a larger managed heap size than other modes. Da der verwaltete Heap nicht komprimiert wird, ist eine stärkere Fragmentierung möglich.Because it does not compact the managed heap, higher fragmentation is possible. Stellen Sie sicher, dass genügend Arbeitsspeicher verfügbar ist.Ensure that sufficient memory is available.

Richtlinien für die Verwendung von geringer LatenzGuidelines for Using Low Latency

Beachten Sie beim Verwenden des LowLatency-Modus die folgenden Richtlinien:When you use LowLatency mode, consider the following guidelines:

  • Halten Sie die Zeiten mit geringer Latenz möglichst kurz.Keep the period of time in low latency as short as possible.

  • Vermeiden Sie es, in Zeiten mit geringer Latenz große Speichermengen zu belegen.Avoid allocating high amounts of memory during low latency periods. Benachrichtigungen über unzureichenden Arbeitsspeicher können ausgegeben werden, wenn die Garbage Collection weniger Objekte freigibt.Low memory notifications can occur because garbage collection reclaims fewer objects.

  • Minimieren Sie im Modus für geringe Latenz die Anzahl der Zuordnungen, insbesondere Zuordnungen für den großen Objektheap und fixierte Objekte.While in the low latency mode, minimize the number of allocations you make, in particular allocations onto the Large Object Heap and pinned objects.

  • Achten Sie auf potenziell zuordnende Threads.Be aware of threads that could be allocating. Weil die Einstellung der LatencyMode-Eigenschaft prozessweit gültig ist, könnte für jeden potenziell zuordnenden Thread eine OutOfMemoryException ausgelöst werden.Because the LatencyMode property setting is process-wide, you could generate an OutOfMemoryException on any thread that may be allocating.

  • Umschließen Sie den Code mit geringer Latenz in eingeschränkten Ausführungsbereichen (weitere Informationen finden Sie unter Eingeschränkte Ausführungsbereiche).Wrap the low latency code in constrained execution regions (for more information, see Constrained Execution Regions).

  • Sie können Garbage Collections der Generation 2 in Zeiten mit geringer Latenz erzwingen, indem Sie die GC.Collect(Int32, GCCollectionMode)-Methode aufrufen.You can force generation 2 collections during a low latency period by calling the GC.Collect(Int32, GCCollectionMode) method.

Siehe auchSee also