Latenzmodi
Aktualisiert: November 2007
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 LatencyMode-Eigenschaft auf einen der 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. Garbage Collections der Generation 2 finden seltener statt, wodurch das Workingset der Anwendung allmählich wächst. Daher empfiehlt es sich, den 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.
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 |
---|---|
Für Anwendungen ohne Benutzeroberfläche oder serverseitige Vorgänge.
|
|
Für die meisten Anwendungen mit Benutzeroberfläche. |
|
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:
-
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.
-
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 sowohl <gcConcurrent> als auch <gcServer> aktiviert sind.
Hinweis: |
---|
Die gleichzeitige Garbage Collection wird nicht für Anwendungen unterstützt, die im WOW64 x86-Emulator auf 64-Bit-Systemen mit einer Implementierung der Intel Itanium-Architektur (früher als IA-64 bezeichnet) ausgeführt werden. Weitere Informationen zur Verwendung von WOW64 auf 64-Bit-Windows-Systemen finden Sie unter Ausführen von 32-Bit-Anwendungen. |
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 zuzuordnen. 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).
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