GC.Collect Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Forza l'operazione di Garbage Collection.
Overload
| Nome | Descrizione |
|---|---|
| Collect() |
Forza un'operazione immediata di Garbage Collection di tutte le generazioni. |
| Collect(Int32) |
Forza un'operazione immediata di Garbage Collection dalla generazione 0 a una generazione specificata. |
| Collect(Int32, GCCollectionMode) |
Forza un'operazione di Garbage Collection dalla generazione 0 a una generazione specificata, alla volta specificata da un GCCollectionMode valore. |
| Collect(Int32, GCCollectionMode, Boolean) |
Forza un'operazione di Garbage Collection dalla generazione 0 a una generazione specificata, alla volta specificata da un GCCollectionMode valore, con un valore che specifica se la raccolta deve essere bloccata. |
| Collect(Int32, GCCollectionMode, Boolean, Boolean) |
Forza un'operazione di Garbage Collection dalla generazione 0 a una generazione specificata, alla volta specificata da un GCCollectionMode valore, con valori che specificano se la raccolta deve essere bloccata e compattata. |
Collect()
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
Forza un'operazione immediata di Garbage Collection di tutte le generazioni.
public:
static void Collect();
public static void Collect();
static member Collect : unit -> unit
Public Shared Sub Collect ()
Esempio
Nell'esempio seguente viene illustrato come utilizzare il Collect metodo per eseguire una raccolta in tutte le generazioni di memoria. Il codice genera un numero di oggetti inutilizzati e quindi chiama il Collect metodo per pulirli dalla memoria.
using System;
class MyGCCollectClass
{
private const int maxGarbage = 1000;
static void Main()
{
// Put some objects in memory.
MyGCCollectClass.MakeSomeGarbage();
Console.WriteLine("Memory used before collection: {0:N0}",
GC.GetTotalMemory(false));
// Collect all generations of memory.
GC.Collect();
Console.WriteLine("Memory used after full collection: {0:N0}",
GC.GetTotalMemory(true));
}
static void MakeSomeGarbage()
{
Version vt;
// Create objects and release them to fill up memory with unused objects.
for(int i = 0; i < maxGarbage; i++) {
vt = new Version();
}
}
}
// The output from the example resembles the following:
// Memory used before collection: 79,392
// Memory used after full collection: 52,640
open System
let maxGarbage = 1000
let makeSomeGarbage () =
// Create objects and release them to fill up memory with unused objects.
for _ = 1 to maxGarbage do
Version() |> ignore
// Put some objects in memory.
makeSomeGarbage()
printfn $"Memory used before collection: {GC.GetTotalMemory false:N0}"
// Collect all generations of memory.
GC.Collect()
printfn $"Memory used after full collection: {GC.GetTotalMemory true:N0}"
// The output from the example resembles the following:
// Memory used before collection: 79,392
// Memory used after full collection: 52,640
Class MyGCCollectClass
Private Const maxGarbage As Integer = 1000
Shared Sub Main()
'Put some objects in memory.
MyGCCollectClass.MakeSomeGarbage()
Console.WriteLine("Memory used before collection: {0:N0}",
GC.GetTotalMemory(False))
'Collect all generations of memory.
GC.Collect()
Console.WriteLine("Memory used after full collection: {0:N0}",
GC.GetTotalMemory(True))
End Sub
Shared Sub MakeSomeGarbage()
Dim vt As Version
Dim i As Integer
For i = 0 To maxGarbage - 1
'Create objects and release them to fill up memory with unused objects.
vt = New Version()
Next
End Sub
End Class
' The output from the example resembles the following:
' Memory used before collection: 79,392
' Memory used after full collection: 52,640
Commenti
Usare questo metodo per provare a recuperare tutta la memoria inaccessibile. Esegue un'operazione di Garbage Collection di blocco di tutte le generazioni.
Tutti gli oggetti, indipendentemente da quanto tempo sono stati in memoria, vengono considerati per la raccolta; Tuttavia, gli oggetti a cui viene fatto riferimento nel codice gestito non vengono raccolti. Usare questo metodo per forzare il sistema a tentare di recuperare la quantità massima di memoria disponibile.
A partire da .NET Framework 4.5.1, è possibile compattare l'heap di oggetti di grandi dimensioni impostando la GCSettings.LargeObjectHeapCompactionMode proprietà su GCLargeObjectHeapCompactionMode.CompactOnce prima di chiamare il Collect metodo, come illustrato nell'esempio seguente.
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
GCSettings.LargeObjectHeapCompactionMode <- GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect()
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect()
Vedi anche
Si applica a
Collect(Int32)
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
Forza un'operazione immediata di Garbage Collection dalla generazione 0 a una generazione specificata.
public:
static void Collect(int generation);
public static void Collect(int generation);
static member Collect : int -> unit
Public Shared Sub Collect (generation As Integer)
Parametri
- generation
- Int32
Numero della generazione meno recente da eseguire per il Garbage Collection.
Eccezioni
generation non è valido.
Esempio
Nell'esempio seguente viene illustrato come usare il Collect metodo per eseguire una raccolta su singoli livelli di memoria. Il codice genera un numero di oggetti inutilizzati e quindi chiama il Collect metodo per pulirli dalla memoria.
using System;
namespace GCCollectIntExample
{
class MyGCCollectClass
{
private const long maxGarbage = 1000;
static void Main()
{
MyGCCollectClass myGCCol = new MyGCCollectClass();
// Determine the maximum number of generations the system
// garbage collector currently supports.
Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);
myGCCol.MakeSomeGarbage();
// Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
// Determine the best available approximation of the number
// of bytes currently allocated in managed memory.
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
// Perform a collection of generation 0 only.
GC.Collect(0);
// Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
// Perform a collection of all generations up to and including 2.
GC.Collect(2);
// Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
Console.Read();
}
void MakeSomeGarbage()
{
Version vt;
for(int i = 0; i < maxGarbage; i++)
{
// Create objects and release them to fill up memory
// with unused objects.
vt = new Version();
}
}
}
}
open System
let maxGarbage = 1000
type MyGCCollectClass() =
member _.MakeSomeGarbage() =
for _ = 1 to maxGarbage do
// Create objects and release them to fill up memory with unused objects.
Version() |> ignore
[<EntryPoint>]
let main _ =
let myGCCol = MyGCCollectClass()
// Determine the maximum number of generations the system
// garbage collector currently supports.
printfn $"The highest generation is {GC.MaxGeneration}"
myGCCol.MakeSomeGarbage()
// Determine which generation myGCCol object is stored in.
printfn $"Generation: {GC.GetGeneration myGCCol}"
// Determine the best available approximation of the number
// of bytes currently allocated in managed memory.
printfn $"Total Memory: {GC.GetTotalMemory false}"
// Perform a collection of generation 0 only.
GC.Collect 0
// Determine which generation myGCCol object is stored in.
printfn $"Generation: {GC.GetGeneration myGCCol}"
printfn $"Total Memory: {GC.GetTotalMemory false}"
// Perform a collection of all generations up to and including 2.
GC.Collect 2
// Determine which generation myGCCol object is stored in.
printfn $"Generation: {GC.GetGeneration myGCCol}"
printfn $"Total Memory: {GC.GetTotalMemory false}"
0
Namespace GCCollectInt_Example
Class MyGCCollectClass
Private maxGarbage As Long = 10000
Public Shared Sub Main()
Dim myGCCol As New MyGCCollectClass
'Determine the maximum number of generations the system
'garbage collector currently supports.
Console.WriteLine("The highest generation is {0}", GC.MaxGeneration)
myGCCol.MakeSomeGarbage()
'Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
'Determine the best available approximation of the number
'of bytes currently allocated in managed memory.
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
'Perform a collection of generation 0 only.
GC.Collect(0)
'Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
'Perform a collection of all generations up to and including 2.
GC.Collect(2)
'Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
Console.Read()
End Sub
Sub MakeSomeGarbage()
Dim vt As Version
Dim i As Integer
For i = 0 To maxGarbage - 1
'Create objects and release them to fill up memory
'with unused objects.
vt = New Version
Next i
End Sub
End Class
End Namespace
Commenti
Usare questo metodo per provare a recuperare memoria inaccessibile. Tuttavia, l'uso di questo metodo non garantisce che tutta la memoria inaccessibile nella generazione specificata venga recuperata.
Se l'invecchiamento degli oggetti viene implementato, Il Garbage Collector non raccoglie oggetti con un numero di generazione superiore alla generazione specificata. Se l'invecchiamento dell'oggetto non viene implementato, il Garbage Collector considera tutti gli oggetti durante l'operazione di Garbage Collection.
Utilizzare la MaxGeneration proprietà per determinare il valore massimo valido del generation parametro.
Per fare in modo che il Garbage Collector consideri tutti gli oggetti indipendentemente dalla generazione, usare la versione di questo metodo che non accetta parametri. Per fare in modo che gli oggetti di Garbage Collector siano recuperati in base a un'impostazione GCCollectionMode , usare l'overload del GC.Collect(Int32, GCCollectionMode) metodo .
Vedi anche
Si applica a
Collect(Int32, GCCollectionMode)
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
Forza un'operazione di Garbage Collection dalla generazione 0 a una generazione specificata, alla volta specificata da un GCCollectionMode valore.
public:
static void Collect(int generation, GCCollectionMode mode);
public static void Collect(int generation, GCCollectionMode mode);
static member Collect : int * GCCollectionMode -> unit
Public Shared Sub Collect (generation As Integer, mode As GCCollectionMode)
Parametri
- generation
- Int32
Numero della generazione meno recente da eseguire per il Garbage Collection.
- mode
- GCCollectionMode
Valore di enumerazione che specifica se l'operazione di Garbage Collection è forzata (Default o Forced) o ottimizzata (Optimized).
Eccezioni
Esempio
L'esempio seguente forza un'operazione di Garbage Collection per gli oggetti di seconda generazione con l'impostazione Optimized .
using System;
class Program
{
static void Main(string[] args)
{
GC.Collect(2, GCCollectionMode.Optimized);
}
}
open System
GC.Collect(2, GCCollectionMode.Optimized)
Class Program
Public Shared Sub Main()
GC.Collect(2, GCCollectionMode.Optimized)
End Sub
End Class
Commenti
Usare il parametro per specificare se l'operazione mode di Garbage Collection deve verificarsi immediatamente o solo se il tempo è ottimale per recuperare gli oggetti. L'uso di questo metodo non garantisce che tutta la memoria inaccessibile nella generazione specificata venga recuperata.
Per regolare l'intrusività di Garbage Collection durante i periodi critici nell'applicazione, impostare la LatencyMode proprietà .
Il Garbage Collector non raccoglie oggetti con un numero di generazione superiore a quello specificato dal generation parametro . Utilizzare la MaxGeneration proprietà per determinare il valore massimo valido di generation.
Per fare in modo che il Garbage Collector consideri tutti gli oggetti indipendentemente dalla generazione, usare la versione di questo metodo che non accetta parametri.
Per fare in modo che il Garbage Collector recuperi oggetti fino a una generazione specificata di oggetti, usare l'overload del GC.Collect(Int32) metodo. Quando si specifica la generazione massima, vengono raccolti tutti gli oggetti.
Vedi anche
Si applica a
Collect(Int32, GCCollectionMode, Boolean)
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
Forza un'operazione di Garbage Collection dalla generazione 0 a una generazione specificata, alla volta specificata da un GCCollectionMode valore, con un valore che specifica se la raccolta deve essere bloccata.
public:
static void Collect(int generation, GCCollectionMode mode, bool blocking);
public static void Collect(int generation, GCCollectionMode mode, bool blocking);
static member Collect : int * GCCollectionMode * bool -> unit
Public Shared Sub Collect (generation As Integer, mode As GCCollectionMode, blocking As Boolean)
Parametri
- generation
- Int32
Numero della generazione meno recente da eseguire per il Garbage Collection.
- mode
- GCCollectionMode
Valore di enumerazione che specifica se l'operazione di Garbage Collection è forzata (Default o Forced) o ottimizzata (Optimized).
- blocking
- Boolean
true per eseguire un'operazione di Garbage Collection bloccando; false per eseguire un'operazione di Garbage Collection in background laddove possibile.
Eccezioni
Commenti
La tabella seguente riepiloga l'interazione dei mode parametri e blocking :
mode |
blocking è true |
blocking è false |
|---|---|---|
| Forced oppure Default | Una raccolta di blocco viene eseguita il prima possibile. Se una raccolta in background è in corso e generation è 0 o 1, il Collect(Int32, GCCollectionMode, Boolean) metodo attiva immediatamente una raccolta di blocco e restituisce al termine della raccolta. Se una raccolta in background è in corso e generation è 2, il metodo attende fino al termine della raccolta in background, attiva una raccolta di generazione 2 di blocco 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. |
Se una chiamata al Collect(Int32, GCCollectionMode, Boolean) metodo esegue un'operazione di Garbage Collection di blocco completa, è anche possibile compattare l'heap di oggetti di grandi dimensioni impostando la GCSettings.LargeObjectHeapCompactionMode proprietà su GCLargeObjectHeapCompactionMode.CompactOnce prima di chiamare il Collect metodo .
Si applica a
Collect(Int32, GCCollectionMode, Boolean, Boolean)
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
- Origine:
- GC.CoreCLR.cs
Forza un'operazione di Garbage Collection dalla generazione 0 a una generazione specificata, alla volta specificata da un GCCollectionMode valore, con valori che specificano se la raccolta deve essere bloccata e compattata.
public:
static void Collect(int generation, GCCollectionMode mode, bool blocking, bool compacting);
public static void Collect(int generation, GCCollectionMode mode, bool blocking, bool compacting);
static member Collect : int * GCCollectionMode * bool * bool -> unit
Public Shared Sub Collect (generation As Integer, mode As GCCollectionMode, blocking As Boolean, compacting As Boolean)
Parametri
- generation
- Int32
Numero della generazione meno recente da eseguire per il Garbage Collection.
- mode
- GCCollectionMode
Valore di enumerazione che specifica se l'operazione di Garbage Collection è forzata (Default o Forced) o ottimizzata (Optimized).
- blocking
- Boolean
true per eseguire un'operazione di Garbage Collection bloccando; false per eseguire un'operazione di Garbage Collection in background laddove possibile.
- compacting
- Boolean
true per compattare l'heap dell'oggetto piccolo; false solo per spazzare.
Commenti
Se blocking è false, il processo GC decide se eseguire uno sfondo o un'operazione di Garbage Collection bloccata. Se compacting è true, esegue un'operazione di Garbage Collection di blocco.
Se compacting è true, il runtime compatta l'heap di oggetti di piccole dimensioni (SOH). L'heap di oggetti di grandi dimensioni (LOH) non viene compattato a meno che la GCSettings.LargeObjectHeapCompactionMode proprietà non sia impostata su GCLargeObjectHeapCompactionMode.CompactOnce. Si noti che questo include tutto il blocco di Garbage Collection, non solo il blocco completo delle operazioni di Garbage Collection.
È possibile chiamare il Collect(Int32, GCCollectionMode, Boolean, Boolean) metodo per ridurre l'heap gestito alla dimensione minima possibile, come illustrato nel frammento di codice seguente.
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect(2, GCCollectionMode.Forced, true, true);
GCSettings.LargeObjectHeapCompactionMode <- GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect(2, GCCollectionMode.Forced, true, true)
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect(2, GCCollectionMode.Forced, True, True)
La specifica true per l'argomento compacting garantisce un'operazione di Garbage Collection compatta e completa bloccante. L'impostazione della GCSettings.LargeObjectHeapCompactionMode proprietà su GCLargeObjectHeapCompactionMode.CompactOnce garantisce che sia LOH che SOH siano compattati.