Condividi tramite


GC.AddMemoryPressure(Int64) Metodo

Definizione

Informa il runtime di un'allocazione elevata di memoria non gestita che deve essere presa in considerazione durante la pianificazione di Garbage Collection.

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)

Parametri

bytesAllocated
Int64

Quantità incrementale di memoria non gestita allocata.

Attributi

Eccezioni

bytesAllocated è minore o uguale a 0.

oppure

In un computer a 32 bit è bytesAllocated maggiore di Int32.MaxValue.

Commenti

Il modello comune per il rilascio delle risorse native è tramite il finalizzatore di un tipo. Se un oggetto gestito usa memoria nativa, può liberare tale memoria nativa nel finalizzatore. Il Garbage Collector conosce solo le raccolte di memoria gestita e pianifica in base a queste conoscenze. Si supponga uno scenario in cui un piccolo oggetto gestito sia associato a una grande quantità di utilizzo della memoria nativa e che questo oggetto gestito si trovi ora in gen2. Un GC gen2 potrebbe non verificarsi per un certo periodo di tempo, il che significa che la grande quantità di memoria nativa non verrà rilasciata fino a quando non si verifica la seconda generazione. Il runtime fornisce i AddMemoryPressure metodi e RemoveMemoryPressure per facilitare questo scenario. Il runtime mantiene un record interno della quantità di utilizzo elevato della memoria aggiunta e rimozione di queste API e attiva un GC gen2, se considerato produttivo. Non si tratta quindi di una funzionalità del GC, ma piuttosto di un elemento fornito dal runtime per attivare i controller di dominio.

I AddMemoryPressure metodi e RemoveMemoryPressure migliorano le prestazioni solo per i tipi che dipendono esclusivamente dai finalizzatori per rilasciare le risorse non gestite. Non è necessario usare questi metodi nei tipi che seguono il modello dispose, in cui i finalizzatori vengono usati per pulire le risorse non gestite solo nel caso in cui un consumer del tipo dimentica di chiamare Dispose. Per altre informazioni sulla finalizzazione degli oggetti e sul modello dispose, vedere Pulizia delle risorse non gestite.

Nel modello di utilizzo più semplice, un oggetto gestito alloca memoria non gestita nel costruttore e lo rilascia nel Finalize metodo . Chiamare il metodo dopo aver AddMemoryPressure allocato la memoria non gestita e chiamare il metodo dopo il RemoveMemoryPressure rilascio.

In scenari più complessi, in cui l'allocazione di memoria non gestita cambia sostanzialmente durante la durata dell'oggetto gestito, è possibile chiamare i AddMemoryPressure metodi e RemoveMemoryPressure per comunicare queste modifiche incrementali al runtime.

Attenzione

È necessario assicurarsi di rimuovere esattamente la quantità di pressione che si aggiunge. In caso contrario, può influire negativamente sulle prestazioni del sistema nelle applicazioni eseguite per lunghi periodi di tempo.

Si applica a