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.

Siehe auch