GC.RemoveMemoryPressure(Int64) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Informiert die Laufzeit, dass nicht verwalteter Speicher freigegeben wurde und beim Planen der Garbage Collection nicht mehr berücksichtigt werden muss.
public:
static void RemoveMemoryPressure(long bytesAllocated);
[System.Security.SecurityCritical]
public static void RemoveMemoryPressure(long bytesAllocated);
public static void RemoveMemoryPressure(long bytesAllocated);
[<System.Security.SecurityCritical>]
static member RemoveMemoryPressure : int64 -> unit
static member RemoveMemoryPressure : int64 -> unit
Public Shared Sub RemoveMemoryPressure (bytesAllocated As Long)
Parameter
- bytesAllocated
- Int64
Die Menge des nicht verwalteten Speichers, der freigegeben 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.