Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nella maggior parte dei casi, il Garbage Collector può determinare il momento migliore per eseguire una raccolta e dovresti lasciarlo funzionare in modo indipendente. Esistono rari casi in cui una raccolta forzata potrebbe migliorare le prestazioni dell'applicazione. In questi casi, è possibile indurre Garbage Collection usando il GC.Collect metodo per forzare un'operazione di Garbage Collection.
Usare il GC.Collect metodo quando si verifica una riduzione significativa della quantità di memoria usata in un punto specifico nel codice dell'applicazione. Ad esempio, se l'applicazione usa una finestra di dialogo complessa con più controlli, la chiamata Collect quando la finestra di dialogo viene chiusa potrebbe migliorare le prestazioni recuperando immediatamente la memoria usata dalla finestra di dialogo. Assicurarsi che l'applicazione non induca troppo spesso l'operazione di Garbage Collection, perché potrebbe ridurre le prestazioni se il Garbage Collector tenta di recuperare gli oggetti in momenti non ottimali. È possibile fornire un GCCollectionMode.Optimized valore di enumerazione al Collect metodo per raccogliere solo quando la raccolta sarebbe produttiva, come illustrato nella sezione successiva.
Modalità raccolta GC
È possibile usare uno degli overload del GC.Collect metodo che include un GCCollectionMode valore per specificare il comportamento di una raccolta forzata come indicato di seguito.
valore GCCollectionMode |
Descrizione |
|---|---|
| Default | Usa l'impostazione predefinita di Garbage Collection per la versione in esecuzione di .NET. |
| Forced | Forza l'esecuzione immediata della raccolta dei rifiuti. Questo è equivalente al chiamare l'overload GC.Collect(). Genera una raccolta di blocco completa di tutte le generazioni. È anche possibile compattare l'heap di oggetti di grandi dimensioni impostando la GCSettings.LargeObjectHeapCompactionMode proprietà su GCLargeObjectHeapCompactionMode.CompactOnce prima di forzare un'operazione immediata di Garbage Collection con blocco completo. |
| Optimized | Consente al Garbage Collector di determinare se l'ora corrente è ottimale per recuperare gli oggetti. Il garbage collector potrebbe determinare che una raccolta non sarebbe abbastanza produttiva da essere giustificata, nel qual caso terminerà senza recuperare oggetti. |
Raccolte in background o bloccate
È possibile chiamare l'overload del metodo GC.Collect(Int32, GCCollectionMode, Boolean) per specificare se una raccolta indotta sta bloccando o meno. Il tipo di raccolta eseguita dipende da una combinazione dei parametri del metodo mode e blocking.
mode è un membro dell'enumerazione GCCollectionMode ed blocking è un Boolean valore . La tabella seguente riepiloga l'interazione tra gli argomenti mode e blocking.
mode |
blocking = true |
blocking = false |
|---|---|---|
| Forced o Default | Una raccolta di blocco viene eseguita il prima possibile. Se una raccolta in background è in corso e la generazione è 0 o 1, il metodo Collect(Int32, GCCollectionMode, Boolean) attiva immediatamente una raccolta di blocco e restituisce quando la raccolta è terminata. Se è in corso una raccolta in background e il generation parametro è 2, il metodo attende fino al termine della raccolta in background, avvia una raccolta bloccante di generazione 2 e quindi restituisce. |
Una raccolta è effettuata il prima possibile. Il Collect(Int32, GCCollectionMode, Boolean) metodo richiede una raccolta in background, ma questa operazione non è garantita. A seconda delle circostanze, è comunque possibile eseguire una raccolta di blocco. Se una raccolta in background è già in corso, il metodo restituisce immediatamente. |
| Optimized | È possibile eseguire una raccolta di blocco, a seconda dello stato del Garbage Collector e del generation parametro . Il Garbage Collector tenta di offrire prestazioni ottimali. |
È possibile eseguire una raccolta, a seconda dello stato del Garbage Collector. Il Collect(Int32, GCCollectionMode, Boolean) metodo richiede una raccolta in background, ma questa operazione non è garantita. A seconda delle circostanze, è comunque possibile eseguire una raccolta di blocco. Il Garbage Collector tenta di offrire prestazioni ottimali. Se una raccolta in background è già in corso, il metodo restituisce immediatamente. |