Indizierte Auflistungen
In den meisten Fällen können Sie es dem Garbage Collector überlassen, den am besten geeigneten Zeitpunkt für eine Collection zu bestimmen. In seltenen Fällen kann das Erzwingen einer Auflistung jedoch die Leistung der Anwendung erhöhen. In diesen Fällen können Sie die Garbage Collection auslösen, indem Sie die GC.Collect-Methode zum Erzwingen einer Garbage Collection wählen.
Verwenden Sie die GC.Collect-Methode, wenn es zu einem bestimmten Zeitpunkt während der Ausführung des Anwendungscodes zu einer erheblichen Reduzierung des verwendeten Arbeitsspeichers kommt. Wenn die Anwendung zum Beispiel ein kompliziertes Dialogfeld mit mehreren Steuerelementen verwendet, kann der Aufruf von Collect beim Schließen des Dialogfelds die Leistung erhöhen, indem der vom Dialogfeld verwendete Speicher sofort freigegeben wird. Stellen Sie sicher, dass die Anwendung nicht zu häufig eine Garbage Collection durchführt, das sich dies negativ auf die Leistung auswirken kann, wenn der Garbage Collector vergeblich versucht, Objekte zu ungünstigen Zeitpunkten freizugeben. Sie können einen GCCollectionMode.Optimized-Enumerationswert an die Collect-Methode liefern, um nur zu sammeln, wenn die Auflistung produktiv ist, wie im nächsten Abschnitt erläutert wird.
Der GC-Sammlungsmodus
Sie können eine der GC.Collect-Methodenüberladungen verwenden, die einen GCCollectionMode-Wert enthält, um das Verhalten einer erzwungenen Auflistung wie folgt zu bestimmen.
Wert vom Typ GCCollectionMode |
BESCHREIBUNG |
---|---|
Default | Verwendet die standardmäßige Garbage Collection-Einstellung für die ausgeführte .NET-Version. |
Forced | Erzwingt die sofortige Durchführung der Garbage Collection. Dies entspricht dem Aufruf der GC.Collect()-Überladung. Dies führt zu einer vollständigen blockierenden Auflistung aller Generationen. Sie können auch das große Objektheap komprimieren, indem Sie die GCSettings.LargeObjectHeapCompactionMode-Eigenschaft auf GCLargeObjectHeapCompactionMode.CompactOnce festlegen, bevor Sie eine unmittelbare vollständige blockierende Garbage Collection erzwingen. |
Optimized | Ermöglicht dem Garbage Collector zu bestimmten, oder der aktuelle Zeitpunkt zum Freigeben von Objekten optimal ist. Der Garbage Collector kann ermitteln, dass eine Auflistung nicht produktiv genug wäre. In diesem Fall kehrt er zurück, ohne Objekte freizugeben. |
Hintergrund oder blockierende Auflistungen
Sie können die GC.Collect(Int32, GCCollectionMode, Boolean)-Methodenüberladung aufrufen, um anzugeben, ob eine ausgelöste Auflistung blockiert wird oder nicht. Der Typ der ausgeführten Auflistung hängt von einer Kombination der mode
und blocking
-Parameter der Methode ab. Der Wert mode
ist ein Member der GCCollectionMode-Enumeration und blocking
ist ein Boolean-Wert. In der folgenden Tabelle wird die Interaktion der Argumente mode
und blocking
zusammengefasst.
mode |
blocking = true |
blocking = false |
---|---|---|
Forced oder Default | Eine blockierende Auflistung wird so schnell wie möglich ausgeführt. Wenn eine Hintergrundauflistung ausgeführt wird und die Generation 0 oder 1 ist, löst die Collect(Int32, GCCollectionMode, Boolean)-Methode sofort eine blockierende Auflistung aus und wird zurückgegeben, wenn die Auflistung abgeschlossen ist. Wenn eine Hintergrundauflistung ausgeführt wird und der generation -Parameter 2 ist, wartet die Methode, bis die Hintergrundauflistung beendet ist, löst eine blockierende Auflistung der Generation 2 aus und gibt dann zurück. |
Eine Auflistung wird so schnell wie möglich ausgeführt. Die Collect(Int32, GCCollectionMode, Boolean)-Methode fordert eine Hintergrundauflistung, ist jedoch nicht garantiert. Je nach den Umständen wird eine blockierende Auflistung möglicherweise weiterhin ausgeführt. Wenn eine Hintergrundauflistung bereits ausgeführt wird, gibt die Methode sofort zurück. |
Optimized | Eine blockierende Auflistung kann ausgeführt werden, je nach Zustand des Garbage Collectors und des generation -Parameters. Der Garbage Collector versucht, eine optimale Leistung bereitzustellen. |
Eine Auflistung kann ausgeführt werden, je nach Zustand des Garbage Collectors. Die Collect(Int32, GCCollectionMode, Boolean)-Methode fordert eine Hintergrundauflistung, ist jedoch nicht garantiert. Je nach den Umständen wird eine blockierende Auflistung möglicherweise weiterhin ausgeführt. Der Garbage Collector versucht, eine optimale Leistung bereitzustellen. Wenn eine Hintergrundauflistung bereits ausgeführt wird, gibt die Methode sofort zurück. |