GC.Collect Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vynutí uvolňování paměti.
Přetížení
| Name | Description |
|---|---|
| Collect() |
Vynutí okamžité uvolňování paměti všech generací. |
| Collect(Int32) |
Vynutí okamžité uvolňování paměti z generace 0 prostřednictvím zadané generace. |
| Collect(Int32, GCCollectionMode) |
Vynutí uvolňování paměti z generace 0 do zadané generace v okamžiku určeném GCCollectionMode hodnotou. |
| Collect(Int32, GCCollectionMode, Boolean) |
Vynutí uvolňování paměti z generace 0 do zadané generace v okamžiku určeném GCCollectionMode hodnotou s hodnotou určující, zda má být kolekce blokovaná. |
| Collect(Int32, GCCollectionMode, Boolean, Boolean) |
Vynutí uvolňování paměti z generace 0 do zadané generace v době určené GCCollectionMode hodnotou s hodnotami, které určují, zda má kolekce blokovat a komprimovat. |
Collect()
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
Vynutí okamžité uvolňování paměti všech generací.
public:
static void Collect();
public static void Collect();
static member Collect : unit -> unit
Public Shared Sub Collect ()
Příklady
Následující příklad ukazuje, jak použít metodu Collect k provedení kolekce pro všechny generace paměti. Kód vygeneruje řadu nepoužívaných objektů a potom volá metodu Collect , která je vyčistí z paměti.
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
Poznámky
Tuto metodu použijte k pokusu o uvolnění veškeré paměti, která je nepřístupná. Provádí blokování uvolňování paměti všech generací.
Všechny objekty, bez ohledu na to, jak dlouho byly v paměti, jsou považovány za kolekci; Objekty, na které se odkazuje ve spravovaném kódu, se však neshromažďují. Tuto metodu použijte k vynucení, aby se systém pokusil uvolnit maximální množství dostupné paměti.
Počínaje rozhraním .NET Framework 4.5.1 můžete komprimovat velkou haldu objektu (LOH) nastavením GCSettings.LargeObjectHeapCompactionMode vlastnosti před GCLargeObjectHeapCompactionMode.CompactOnce voláním Collect metody, jak ukazuje následující příklad.
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
GCSettings.LargeObjectHeapCompactionMode <- GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect()
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect()
Viz také
Platí pro
Collect(Int32)
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
Vynutí okamžité uvolňování paměti z generace 0 prostřednictvím zadané generace.
public:
static void Collect(int generation);
public static void Collect(int generation);
static member Collect : int -> unit
Public Shared Sub Collect (generation As Integer)
Parametry
- generation
- Int32
Počet nejstarší generace, která se má shromáždit z paměti.
Výjimky
generation není platný.
Příklady
Následující příklad ukazuje, jak použít metodu Collect k provedení kolekce na jednotlivých vrstvách paměti. Kód vygeneruje řadu nepoužívaných objektů a potom volá metodu Collect , která je vyčistí z paměti.
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
Poznámky
Tuto metodu použijte k pokusu o uvolnění paměti, která je nepřístupná. Použití této metody však nezaručuje, že se uvolní veškerá nepřístupná paměť v zadané generaci.
Pokud je implementováno stárnutí objektu, systém uvolňování paměti neshromažďuje objekty s číslem generování, které je vyšší než zadaná generace. Pokud není implementováno stárnutí objektu, systém uvolňování paměti bere v úvahu všechny objekty během uvolňování paměti.
MaxGeneration Pomocí vlastnosti určete maximální platnou hodnotu parametrugeneration.
Pokud chcete, aby systém uvolňování paměti zvážil všechny objekty bez ohledu na jejich generování, použijte verzi této metody, která nepřijímá žádné parametry. Chcete-li uvolnit objekty uvolňování paměti na GCCollectionMode základě nastavení, použijte GC.Collect(Int32, GCCollectionMode) přetížení metody.
Viz také
Platí pro
Collect(Int32, GCCollectionMode)
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
Vynutí uvolňování paměti z generace 0 do zadané generace v okamžiku určeném GCCollectionMode hodnotou.
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)
Parametry
- generation
- Int32
Počet nejstarší generace, která se má shromáždit z paměti.
- mode
- GCCollectionMode
Hodnota výčtu, která určuje, zda je uvolňování paměti vynuceno (Default nebo Forced) nebo optimalizováno (Optimized).
Výjimky
Příklady
Následující příklad vynutí uvolňování paměti pro objekty generace 2 s Optimized nastavením.
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
Poznámky
Pomocí parametru mode určete, zda se má uvolňování paměti provést okamžitě, nebo pouze v případě, že je čas optimální pro uvolnění objektů. Použití této metody nezaručuje, že veškerá nepřístupná paměť v zadané generaci je uvolněna.
Chcete-li upravit rušivost uvolňování paměti během kritických období v aplikaci, nastavte LatencyMode vlastnost.
Systém uvolňování paměti neshromažďuje objekty s číslem generování vyšším, než je určené parametrem generation .
MaxGeneration Pomocí vlastnosti určete maximální platnou generationhodnotu .
Pokud chcete, aby systém uvolňování paměti zvážil všechny objekty bez ohledu na jejich generování, použijte verzi této metody, která nepřijímá žádné parametry.
Chcete-li, aby uvolňování paměti uvolnit objekty až do zadané generace objektů, použijte GC.Collect(Int32) přetížení metody. Při zadání maximální generace se shromažďují všechny objekty.
Viz také
Platí pro
Collect(Int32, GCCollectionMode, Boolean)
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
Vynutí uvolňování paměti z generace 0 do zadané generace v okamžiku určeném GCCollectionMode hodnotou s hodnotou určující, zda má být kolekce blokovaná.
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)
Parametry
- generation
- Int32
Počet nejstarší generace, která se má shromáždit z paměti.
- mode
- GCCollectionMode
Hodnota výčtu, která určuje, zda je uvolňování paměti vynuceno (Default nebo Forced) nebo optimalizováno (Optimized).
- blocking
- Boolean
true k provedení blokování uvolňování paměti; false pokud je to možné, proveďte uvolňování paměti na pozadí.
Výjimky
Poznámky
Následující tabulka shrnuje interakci mode s parametry blocking :
mode |
blocking je true |
blocking je false |
|---|---|---|
| Forced nebo Default | Blokující kolekce se provádí co nejdříve. Pokud probíhá kolekce na pozadí a generation je 0 nebo 1, Collect(Int32, GCCollectionMode, Boolean) metoda okamžitě aktivuje blokující kolekci a vrátí se po dokončení kolekce. Pokud probíhá kolekce na pozadí a generation je 2, metoda počká, dokud se kolekce pozadí nedokončí, aktivuje blokující kolekci 2. generace a vrátí se. |
Sběr se provede co nejdříve. Metoda Collect(Int32, GCCollectionMode, Boolean) požaduje kolekci na pozadí, což však není zaručeno; v závislosti na okolnostech může být přesto provedena blokující kolekce. Pokud již probíhá sběr na pozadí, metoda se vrátí okamžitě. |
| Optimized | Blokující kolekce může být provedena v závislosti na stavu garbage collectoru a parametru generation. Systém garbage collector se snaží zajistit optimální výkon. |
V závislosti na stavu garbage collectoru může být proveden sběr. Metoda Collect(Int32, GCCollectionMode, Boolean) požaduje kolekci na pozadí, což však není zaručeno; v závislosti na okolnostech může být přesto provedena blokující kolekce. Systém garbage collector se snaží zajistit optimální výkon. Pokud již probíhá sběr na pozadí, metoda se vrátí okamžitě. |
Pokud volání Collect(Int32, GCCollectionMode, Boolean) metody provádí úplné blokování uvolňování paměti, můžete také komprimovat velkou haldu objektu nastavením GCSettings.LargeObjectHeapCompactionMode vlastnosti před GCLargeObjectHeapCompactionMode.CompactOnce voláním Collect metody.
Platí pro
Collect(Int32, GCCollectionMode, Boolean, Boolean)
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
- Zdroj:
- GC.CoreCLR.cs
Vynutí uvolňování paměti z generace 0 do zadané generace v době určené GCCollectionMode hodnotou s hodnotami, které určují, zda má kolekce blokovat a komprimovat.
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)
Parametry
- generation
- Int32
Počet nejstarší generace, která se má shromáždit z paměti.
- mode
- GCCollectionMode
Hodnota výčtu, která určuje, zda je uvolňování paměti vynuceno (Default nebo Forced) nebo optimalizováno (Optimized).
- blocking
- Boolean
true k provedení blokování uvolňování paměti; false pokud je to možné, proveďte uvolňování paměti na pozadí.
- compacting
- Boolean
true komprimovat malou haldu objektu; false jen uklidit.
Poznámky
Pokud blocking je false, uvolňování paměti rozhodne, zda provést pozadí nebo blokování uvolňování paměti. Pokud compacting ano true, provede blokování uvolňování paměti.
Pokud compacting ano true, modul runtime zkomprimuje malou haldu objektu (SOH). Velká halda objektu (LOH) není komprimována, pokud GCSettings.LargeObjectHeapCompactionMode není vlastnost nastavena na GCLargeObjectHeapCompactionMode.CompactOnce. Všimněte si, že to zahrnuje všechny blokující uvolňování paměti, nejen úplné blokování uvolňování paměti.
Metodu Collect(Int32, GCCollectionMode, Boolean, Boolean) můžete volat, abyste snížili spravovanou haldu na nejmenší možnou velikost, jak ukazuje následující fragment kódu.
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)
true Určení argumentu compacting zaručuje komprimaci, úplné blokování uvolňování paměti.
GCSettings.LargeObjectHeapCompactionMode Nastavením vlastnosti zajistíteGCLargeObjectHeapCompactionMode.CompactOnce, že LOH i SOH budou komprimovány.