Freigeben über


GC.AddMemoryPressure(Int64) Methode

Definition

Informiert die Laufzeit einer großen Zuweisung von nicht verwaltetem Speicher, die bei der Planung der Garbage Collection berücksichtigt werden soll.

public:
 static void AddMemoryPressure(long bytesAllocated);
[System.Security.SecurityCritical]
public static void AddMemoryPressure(long bytesAllocated);
public static void AddMemoryPressure(long bytesAllocated);
[<System.Security.SecurityCritical>]
static member AddMemoryPressure : int64 -> unit
static member AddMemoryPressure : int64 -> unit
Public Shared Sub AddMemoryPressure (bytesAllocated As Long)

Parameter

bytesAllocated
Int64

Die inkrementelle Menge des nicht verwalteten Speichers, der zugewiesen wurde.

Attribute

Ausnahmen

bytesAllocated ist kleiner oder gleich 0.

- oder -

Auf einem 32-Bit-Computer bytesAllocated ist größer als Int32.MaxValue.

Hinweise

Das allgemeine Muster für das Freigeben nativer Ressourcen erfolgt über den Finalizer eines Typs. Wenn ein verwaltetes Objekt nativen Speicher verwendet, kann es diesen nativen Speicher in seinem Finalizer freigeben. Der Garbage Collector kennt nur verwalteten Speicher und plant Sammlungen basierend auf diesem Wissen. Stellen Sie sich ein Szenario vor, in dem ein kleines verwaltetes Objekt einer großen Menge nativer Speicherauslastung zugeordnet ist, und dieses verwaltete Objekt befindet sich jetzt in Gen2. Eine Gen2 GC kann einige Zeit nicht passieren, was bedeutet, dass die große Menge an systemeigenem Arbeitsspeicher erst freigegeben wird, wenn die nächste Generation2 erfolgt. Die Laufzeit stellt die AddMemoryPressure und RemoveMemoryPressure Methoden bereit, die bei diesem Szenario hilfreich sind. Die Laufzeit speichert einen internen Datensatz darüber, wie viel Arbeitsspeicher diese APIs hinzugefügt und entfernt haben, und löst eine GEN2 GC aus, wenn sie als produktiv eingestuft wird. Dies ist also kein Feature der GC, sondern etwas, das die Laufzeit zum Auslösen von GCs bereitstellt.

Die AddMemoryPressure Und RemoveMemoryPressure Methoden verbessern die Leistung nur für Typen, die ausschließlich von Finalizern abhängen, um die nicht verwalteten Ressourcen freizugeben. Es ist nicht erforderlich, diese Methoden in Typen zu verwenden, die dem Dispose-Muster folgen, in dem Finalizer verwendet werden, um nicht verwaltete Ressourcen nur zu bereinigen, wenn ein Verbraucher des Typs vergessen wird, aufzurufen Dispose. Weitere Informationen über die Finalisierung von Objekten und das Dispose-Muster finden Sie unter Aufräumen von nicht verwalteten Ressourcen.

Im einfachsten Verwendungsmuster weist ein verwaltetes Objekt nicht verwalteten Speicher im Konstruktor zu und gibt es in der Finalize Methode frei. Rufen Sie die Methode nach dem AddMemoryPressure Zuordnen des nicht verwalteten Speichers auf, und rufen Sie die Methode nach dem RemoveMemoryPressure Freigeben auf.

In komplizierteren Szenarien, in denen sich die nicht verwaltete Speicherzuweisung während der Lebensdauer des verwalteten Objekts erheblich ändert, können Sie die und RemoveMemoryPressure methoden AddMemoryPressure aufrufen, um diese inkrementellen Änderungen an der Laufzeit zu kommunizieren.

Vorsicht

Sie müssen sicherstellen, dass Sie genau die Menge an Druck entfernen, die Sie hinzufügen. Andernfalls kann sich dies negativ auf die Leistung des Systems in Anwendungen auswirken, die über einen längeren Zeitraum ausgeführt werden.

Gilt für: