Raccolte indotteInduced Collections

Nella maggior parte dei casi, tramite il Garbage Collector è possibile determinare il momento migliore per eseguire una raccolta ed è consigliabile consentire l'esecuzione in modo indipendente.In most cases, the garbage collector can determine the best time to perform a collection, and you should let it run independently. In rari casi una raccolta forzata può migliorare le prestazioni dell'applicazione.There are rare situations when a forced collection might improve your application's performance. In questi casi, è possibile indurre un'operazione di Garbage Collection usando il metodo GC.Collect per forzarla.In these cases, you can induce garbage collection by using the GC.Collect method to force a garbage collection.

Usare il metodo GC.Collect quando si verifica una riduzione significativa della quantità di memoria usata in un momento specifico nel codice dell'applicazione.Use the GC.Collect method when there is a significant reduction in the amount of memory being used at a specific point in your application's code. Se, ad esempio, l'applicazione usa una finestra di dialogo complessa con numerosi controlli, chiamando il metodo Collect quando la finestra di dialogo è chiusa è possibile migliorare le prestazioni, recuperando immediatamente la memoria usata dalla finestra di dialogo.For example, if your application uses a complex dialog box that has several controls, calling Collect when the dialog box is closed could improve performance by immediately reclaiming the memory used by the dialog box. Assicurarsi che l'applicazione non induca troppo spesso l'operazione di Garbage Collection, in quanto può causare una riduzione delle prestazioni se il Garbage Collector tenta di recuperare oggetti in momenti non ottimali.Be sure that your application is not inducing garbage collection too frequently, because that can decrease performance if the garbage collector is trying to reclaim objects at non-optimal times. È possibile fornire un valore di enumerazione GCCollectionMode.Optimized al metodo Collect in modo che la raccolta venga eseguita solo quando l'operazione è produttiva, come descritto nella sezione seguente.You can supply a GCCollectionMode.Optimized enumeration value to the Collect method to collect only when collection would be productive, as discussed in the next section.

Modalità di raccolta Garbage CollectionGC collection mode

È possibile usare uno degli overload del metodo GC.Collect che include un valore GCCollectionMode per specificare il comportamento di una raccolta forzata, come indicato di seguito.You can use one of the GC.Collect method overloads that includes a GCCollectionMode value to specify the behavior for a forced collection as follows.

Valore diGCCollectionModeGCCollectionMode value DescrizioneDescription
Default Usa l'impostazione di Garbage Collection predefinita per la versione di .NET in esecuzione.Uses the default garbage collection setting for the running version of .NET.
Forced Forza l'esecuzione immediata dell'operazione di Garbage Collection.Forces garbage collection to occur immediately. Equivale alla chiamata dell'overload di GC.Collect().This is equivalent to calling the GC.Collect() overload. Restituisce una raccolta di blocco completa di tutte le generazioni.It results in a full blocking collection of all generations.

È anche possibile compattare l'heap di oggetti di grandi dimensioni impostando la proprietà GCSettings.LargeObjectHeapCompactionMode su GCLargeObjectHeapCompactionMode.CompactOnce prima di forzare una procedura completa immediata di Garbage Collection di blocco.You can also compact the large object heap by setting the GCSettings.LargeObjectHeapCompactionMode property to GCLargeObjectHeapCompactionMode.CompactOnce before forcing an immediate full blocking garbage collection.
Optimized Consente al Garbage Collector di determinare se il momento corrente è ottimale per recuperare oggetti.Enables the garbage collector to determine whether the current time is optimal to reclaim objects.

Il Garbage Collector può determinare che una raccolta non è sufficientemente produttiva per giustificarne l'esecuzione, nel qual caso esce dalla funzione senza recuperare oggetti.The garbage collector could determine that a collection would not be productive enough to be justified, in which case it will return without reclaiming objects.

Raccolte in background o di bloccoBackground or blocking collections

È possibile chiamare l'overload del metodo GC.Collect(Int32, GCCollectionMode, Boolean) per specificare se una raccolta indotta è di blocco o meno.You can call the GC.Collect(Int32, GCCollectionMode, Boolean) method overload to specify whether an induced collection is blocking or not. Il tipo di raccolta eseguita dipende da una combinazione dei parametri mode e blocking del metodo.The type of collection performed depends on a combination of the method's mode and blocking parameters. mode è un membro dell'enumerazione GCCollectionMode e blocking è un valore Boolean.mode is a member of the GCCollectionMode enumeration, and blocking is a Boolean value. La tabella seguente riepiloga l'interazione degli argomenti mode e blocking.The following table summarizes the interaction of the mode and blocking arguments.

mode blocking = true blocking = false
Forced o DefaultForced or Default Viene eseguita una raccolta di blocco il prima possibile.A blocking collection is performed as soon as possible. Se è in corso una raccolta in background e il valore di generation è 0 o 1, il metodo Collect(Int32, GCCollectionMode, Boolean) attiva immediatamente una raccolta di blocco e restituisce un risultato al termine della raccolta.If a background collection is in progress and generation is 0 or 1, the Collect(Int32, GCCollectionMode, Boolean) method immediately triggers a blocking collection and returns when the collection is finished. Se è in corso una raccolta in background e il parametro generation è 2, il metodo attende fino a quando la raccolta in background non viene completata, attiva una raccolta di blocco di generazione 2 e quindi restituisce il risultato.If a background collection is in progress and the generation parameter is 2, the method waits until the background collection is finished, triggers a blocking generation 2 collection, and then returns. Viene eseguita una raccolta il prima possibile.A collection is performed as soon as possible. Il metodo Collect(Int32, GCCollectionMode, Boolean) richiede una raccolta in background, la cui esecuzione non è comunque garantita. A seconda della situazione, può venire comunque eseguita una raccolta di blocco.The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. Se è già in corso una raccolta in background, il metodo viene restituito immediatamente.If a background collection is already in progress, the method returns immediately.
Optimized Può venire eseguita una raccolta di blocco, a seconda dello stato del Garbage Collector e del parametro generation.A blocking collection may be performed, depending on the state of the garbage collector and the generation parameter. Il Garbage Collector tenta di garantire prestazioni ottimali.The garbage collector tries to provide optimal performance. È possibile eseguire una raccolta, a seconda dello stato del Garbage Collector.A collection may be performed, depending on the state of the garbage collector. Il metodo Collect(Int32, GCCollectionMode, Boolean) richiede una raccolta in background, la cui esecuzione non è comunque garantita. A seconda della situazione, può venire comunque eseguita una raccolta di blocco.The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. Il Garbage Collector tenta di garantire prestazioni ottimali.The garbage collector tries to provide optimal performance. Se è già in corso una raccolta in background, il metodo viene restituito immediatamente.If a background collection is already in progress, the method returns immediately.

Vedere ancheSee also