GC.Collect Methode

Definition

Erzwingt eine Garbage Collection.

Überlädt

Collect(Int32, GCCollectionMode, Boolean)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation, angegeben durch jeweils einen GCCollectionMode-Wert und mit einem Wert, der angibt, ob die Auflistung blockieren soll.

Collect(Int32, GCCollectionMode)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation zu einem durch einen GCCollectionMode-Wert angegebenen Zeitpunkt.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation, angegeben durch jeweils einen GCCollectionMode-Wert und mit Werten, die angeben, ob die Auflistung blockieren und komprimieren soll.

Collect()

Erzwingt eine sofortige Garbage Collection für alle Generationen.

Collect(Int32)

Erzwingt eine sofortige Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation.

Collect(Int32, GCCollectionMode, Boolean)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation, angegeben durch jeweils einen GCCollectionMode-Wert und mit einem Wert, der angibt, ob die Auflistung blockieren soll.

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)

Parameter

generation
Int32

Die Anzahl der ältesten Generation, für die die Garbage Collection durchgeführt werden soll.

mode
GCCollectionMode

Ein Enumerationswert, der angibt, ob die Garbage Collection erzwungen (Default oder Forced) oder optimiert wird (Optimized).

blocking
Boolean

true, um eine blockierende Garbage Collection auszuführen; false, um eine Garbage Collection im Hintergrund auszuführen, sofern möglich.

Ausnahmen

generation ist nicht gültig.

- oder - mode ist keiner der GCCollectionMode -Werte.

Hinweise

In der folgenden Tabelle wird die Interaktion der mode Parameter blocking zusammengefasst:

mode blocking ist gleich true. blocking ist gleich false.
Forced oder Default Eine blockierende Auflistung wird so schnell wie möglich ausgeführt. Wenn eine Hintergrundsammlung ausgeführt wird und generation 0 oder 1 ist, löst die Collect(Int32, GCCollectionMode, Boolean) Methode sofort eine blockierungssammlung aus und gibt zurück, wenn die Auflistung abgeschlossen ist. Wenn eine Hintergrundsammlung ausgeführt wird und generation 2 ist, wartet die Methode, bis die Hintergrundsammlung abgeschlossen ist, löst eine blockierte Generation 2-Auflistung aus und gibt dann zurück. Eine Auflistung wird so schnell wie möglich ausgeführt. Die Collect(Int32, GCCollectionMode, Boolean)-Methode fordert eine Hintergrundauflistung, ist jedoch nicht garantiert. Je nach den Umständen wird eine blockierende Auflistung möglicherweise weiterhin ausgeführt. Wenn eine Hintergrundauflistung bereits ausgeführt wird, gibt die Methode sofort zurück.
Optimized Eine blockierende Auflistung kann ausgeführt werden, je nach Zustand des Garbage Collectors und des generation-Parameters. Der Garbage Collector versucht, eine optimale Leistung bereitzustellen. Eine Auflistung kann ausgeführt werden, je nach Zustand des Garbage Collectors. Die Collect(Int32, GCCollectionMode, Boolean)-Methode fordert eine Hintergrundauflistung, ist jedoch nicht garantiert. Je nach den Umständen wird eine blockierende Auflistung möglicherweise weiterhin ausgeführt. Der Garbage Collector versucht, eine optimale Leistung bereitzustellen. Wenn eine Hintergrundauflistung bereits ausgeführt wird, gibt die Methode sofort zurück.

Wenn ein Aufruf der Collect(Int32, GCCollectionMode, Boolean) Methode eine vollständige Blockierung der Garbage Collection ausführt, können Sie den großen Objekt-Heap auch komprimieren, indem Sie die GCSettings.LargeObjectHeapCompactionMode Eigenschaft GCLargeObjectHeapCompactionMode.CompactOnce vor dem Aufrufen der Collect Methode festlegen.

Gilt für:

Collect(Int32, GCCollectionMode)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation zu einem durch einen GCCollectionMode-Wert angegebenen Zeitpunkt.

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)

Parameter

generation
Int32

Die Anzahl der ältesten Generation, für die die Garbage Collection durchgeführt werden soll.

mode
GCCollectionMode

Ein Enumerationswert, der angibt, ob die Garbage Collection erzwungen (Default oder Forced) oder optimiert wird (Optimized).

Ausnahmen

generation ist nicht gültig.

- oder - mode ist keiner der GCCollectionMode-Werte.

Beispiele

Im folgenden Beispiel wird eine Garbage Collection für 2-Objekte der Generation mit der Optimized Einstellung erzwungen.

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

Hinweise

Verwenden Sie den mode Parameter, um anzugeben, ob die Garbage Collection sofort auftreten soll oder nur, wenn die Zeit optimal ist, um Objekte wiederzugeben. Durch die Verwendung dieser Methode wird nicht sichergestellt, dass alle nicht zugänglichen Speicher in der angegebenen Generation erneut beansprucht werden.

Um die Intrusivität der Garbage Collection während kritischer Zeiträume in Ihrer Anwendung anzupassen, legen Sie die LatencyMode Eigenschaft fest.

Der Garbage Collector sammelt keine Objekte mit einer Generationsnummer, die höher als durch den generation Parameter angegeben ist. Verwenden Sie die MaxGeneration Eigenschaft, um den maximal gültigen Wert von generation.

Wenn der Garbage Collector alle Objekte unabhängig von ihrer Generation in Betracht ziehen soll, verwenden Sie die Version dieser Methode, die keine Parameter verwendet.

Wenn der Garbage Collector Objekte bis zu einer bestimmten Generation von Objekten zurückfordert, verwenden Sie die GC.Collect(Int32) Methodenüberladung. Wenn Sie die maximale Generation angeben, werden alle Objekte gesammelt.

Siehe auch

Gilt für:

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation, angegeben durch jeweils einen GCCollectionMode-Wert und mit Werten, die angeben, ob die Auflistung blockieren und komprimieren soll.

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)

Parameter

generation
Int32

Die Anzahl der ältesten Generation, für die die Garbage Collection durchgeführt werden soll.

mode
GCCollectionMode

Ein Enumerationswert, der angibt, ob die Garbage Collection erzwungen (Default oder Forced) oder optimiert wird (Optimized).

blocking
Boolean

true, um eine blockierende Garbage Collection auszuführen; false, um eine Garbage Collection im Hintergrund auszuführen, sofern möglich.

compacting
Boolean

true zum Komprimieren des kleinen Objektheaps; false, um nur Sweep durchzuführen.

Hinweise

Wenn blocking dies der Grund ist false, entscheidet der GC, ob ein Hintergrund oder eine blockierte Garbage Collection ausgeführt werden soll. Wenn compacting dies der Grund ist true, führt sie eine blockierte Garbage Collection aus.

trueIst dies der Grundcompacting, komprimiert die Laufzeit den kleinen Objekt-Heap (SOH). Der große Objekt-Heap (LOH) wird nicht komprimiert, es sei denn, die GCSettings.LargeObjectHeapCompactionMode Eigenschaft ist auf festgelegt GCLargeObjectHeapCompactionMode.CompactOnce. Beachten Sie, dass dies alle blockierenden Garbage Collections enthält, nicht nur voll blockierende Garbage Collections.

Sie können die Collect(Int32, GCCollectionMode, Boolean, Boolean) Methode aufrufen, um den verwalteten Heap auf die kleinste Größe zu reduzieren, wie das folgende Codefragment veranschaulicht.

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)

Die Angabe true für das compacting Argument garantiert eine komprimierende, vollständige Blockierung der Garbage Collection. Durch Festlegen der GCSettings.LargeObjectHeapCompactionMode Eigenschaft wird GCLargeObjectHeapCompactionMode.CompactOnce sichergestellt, dass sowohl der LOH als auch der SOH komprimiert werden.

Gilt für:

Collect()

Erzwingt eine sofortige Garbage Collection für alle Generationen.

public:
 static void Collect();
public static void Collect ();
static member Collect : unit -> unit
Public Shared Sub Collect ()

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie sie die Collect Methode zum Ausführen einer Auflistung auf allen Generationen des Arbeitsspeichers verwenden. Der Code generiert eine Reihe von nicht verwendeten Objekten und ruft dann die Collect Methode auf, um sie aus dem Arbeitsspeicher zu bereinigen.

using namespace System;

const int maxGarbage = 1000;

void MakeSomeGarbage()
{
   Version^ vt;
   for ( int i = 0; i < maxGarbage; i++ ) {
      // Create objects and release them to fill up memory with unused objects.
      vt = gcnew Version;
   }
}

void main()
{
   // Put some objects in memory.
   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 ) );
}
// The output from the example resembles the following:
//       Memory used before collection:       79,392
//       Memory used after full collection:   52,640
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

Hinweise

Verwenden Sie diese Methode, um zu versuchen, alle Speicher zurückzugeben, auf die nicht zugegriffen werden kann. Es führt eine blockierte Müllsammlung aller Generationen aus.

Alle Objekte, unabhängig davon, wie lange sie im Arbeitsspeicher waren, werden für die Sammlung betrachtet; Objekte, auf die im verwalteten Code verwiesen werden, werden jedoch nicht erfasst. Verwenden Sie diese Methode, um das System zu erzwingen, um die maximale Menge an verfügbarem Arbeitsspeicher zurückzugeben.

Ab dem .NET Framework 4.5.1 können Sie den großen Objekt-Heap (LOH) komprimieren, indem Sie die GCSettings.LargeObjectHeapCompactionMode Eigenschaft GCLargeObjectHeapCompactionMode.CompactOnce vor dem Aufrufen der Collect Methode festlegen, wie das folgende Beispiel veranschaulicht.

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
GCSettings.LargeObjectHeapCompactionMode <- GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect()
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce
GC.Collect()

Siehe auch

Gilt für:

Collect(Int32)

Erzwingt eine sofortige Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation.

public:
 static void Collect(int generation);
public static void Collect (int generation);
static member Collect : int -> unit
Public Shared Sub Collect (generation As Integer)

Parameter

generation
Int32

Die Anzahl der ältesten Generation, für die die Garbage Collection durchgeführt werden soll.

Ausnahmen

generation ist nicht gültig.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie Die Collect Methode zum Ausführen einer Auflistung auf einzelnen Speicherebenen verwendet wird. Der Code generiert eine Reihe von nicht verwendeten Objekten und ruft dann die Collect Methode auf, um sie aus dem Arbeitsspeicher zu bereinigen.

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {
         
         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew 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 ) );
}
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

Hinweise

Verwenden Sie diese Methode, um zu versuchen, speicherzurücken, auf den nicht zugegriffen werden kann. Die Verwendung dieser Methode garantiert jedoch nicht, dass der gesamte nicht zugängliche Speicher in der angegebenen Generation erneut beansprucht wird.

Wenn Objektalterung implementiert ist, sammelt der Garbage Collector keine Objekte mit einer Generationsnummer, die höher als die angegebene Generation ist. Wenn die Objektalterung nicht implementiert ist, betrachtet der Garbage Collector alle Objekte während der Garbage Collection.

Verwenden Sie die MaxGeneration Eigenschaft, um den maximalen gültigen Wert des generation Parameters zu ermitteln.

Wenn der Garbage Collector alle Objekte unabhängig von ihrer Generation in Betracht ziehen soll, verwenden Sie die Version dieser Methode, die keine Parameter verwendet. Verwenden Sie die GC.Collect(Int32, GCCollectionMode) Methodenüberladung, um die Garbage Collector-Objekte basierend auf einer GCCollectionMode Einstellung zurückzufordern.

Siehe auch

Gilt für: