GC.Collect Metode

Definisi

Memaksa pengumpulan sampah.

Overload

Collect()

Memaksa pengumpulan sampah langsung dari semua generasi.

Collect(Int32)

Memaksa pengumpulan sampah langsung dari generasi 0 hingga generasi tertentu.

Collect(Int32, GCCollectionMode)

Memaksa pengumpulan sampah dari generasi 0 hingga generasi tertentu, pada waktu yang ditentukan oleh GCCollectionMode nilai.

Collect(Int32, GCCollectionMode, Boolean)

Memaksa pengumpulan sampah dari generasi 0 hingga generasi tertentu, pada waktu yang ditentukan oleh GCCollectionMode nilai, dengan nilai yang menentukan apakah koleksi harus diblokir.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Memaksa pengumpulan sampah dari generasi 0 hingga generasi tertentu, pada waktu yang ditentukan oleh GCCollectionMode nilai, dengan nilai yang menentukan apakah koleksi harus memblokir dan memampatkan.

Collect()

Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs

Memaksa pengumpulan sampah langsung dari semua generasi.

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

Contoh

Contoh berikut menunjukkan cara menggunakan Collect metode untuk melakukan koleksi pada semua generasi memori. Kode menghasilkan sejumlah objek yang tidak digunakan, lalu memanggil Collect metode untuk membersihkannya dari memori.

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

Keterangan

Gunakan metode ini untuk mencoba mengklaim kembali semua memori yang tidak dapat diakses. Ini melakukan pemblokiran pengumpulan sampah dari semua generasi.

Semua objek, terlepas dari berapa lama mereka berada dalam memori, dipertimbangkan untuk koleksi; namun, objek yang direferensikan dalam kode terkelola tidak dikumpulkan. Gunakan metode ini untuk memaksa sistem mencoba mengklaim kembali jumlah maksimum memori yang tersedia.

Dimulai dengan .NET Framework 4.5.1, Anda dapat memampatkan tumpukan objek besar (LOH) dengan mengatur GCSettings.LargeObjectHeapCompactionMode properti ke GCLargeObjectHeapCompactionMode.CompactOnce sebelum memanggil Collect metode , seperti yang diilustrasikan contoh berikut.

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

Lihat juga

Berlaku untuk

Collect(Int32)

Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs

Memaksa pengumpulan sampah langsung dari generasi 0 hingga generasi tertentu.

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

Jumlah generasi tertua yang akan dikumpulkan sampah.

Pengecualian

generation tidak valid.

Contoh

Contoh berikut menunjukkan cara menggunakan Collect metode untuk melakukan koleksi pada lapisan memori individual. Kode menghasilkan sejumlah objek yang tidak digunakan, lalu memanggil Collect metode untuk membersihkannya dari memori.

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

Keterangan

Gunakan metode ini untuk mencoba mengklaim kembali memori yang tidak dapat diakses. Namun, menggunakan metode ini tidak menjamin bahwa semua memori yang tidak dapat diakses dalam generasi yang ditentukan diklaim kembali.

Jika penuaan objek diimplementasikan, pengumpul sampah tidak mengumpulkan objek dengan nomor generasi yang lebih tinggi dari generasi yang ditentukan. Jika penuaan objek tidak diimplementasikan, pengumpul sampah mempertimbangkan semua objek selama pengumpulan sampah.

MaxGeneration Gunakan properti untuk menentukan nilai maksimum parameter yang generation valid.

Agar pengumpul sampah mempertimbangkan semua objek terlepas dari pembuatannya, gunakan versi metode ini yang tidak mengambil parameter. Agar pengumpul sampah mengklaim ulang objek berdasarkan GCCollectionMode pengaturan, gunakan GC.Collect(Int32, GCCollectionMode) metode kelebihan beban.

Lihat juga

Berlaku untuk

Collect(Int32, GCCollectionMode)

Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs

Memaksa pengumpulan sampah dari generasi 0 hingga generasi tertentu, pada waktu yang ditentukan oleh GCCollectionMode nilai.

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

Jumlah generasi tertua yang akan dikumpulkan sampah.

mode
GCCollectionMode

Nilai enumerasi yang menentukan apakah pengumpulan sampah dipaksa (Default atau Forced) atau dioptimalkan (Optimized).

Pengecualian

generation tidak valid.

-atau-

mode bukan salah GCCollectionMode satu nilai.

Contoh

Contoh berikut memaksa pengumpulan sampah untuk objek generasi 2 dengan Optimized pengaturan .

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

Keterangan

mode Gunakan parameter untuk menentukan apakah pengumpulan sampah harus segera terjadi atau hanya jika waktunya optimal untuk mengklaim kembali objek. Menggunakan metode ini tidak menjamin bahwa semua memori yang tidak dapat diakses dalam generasi yang ditentukan diklaim kembali.

Untuk menyesuaikan gangguan pengumpulan sampah selama periode kritis dalam aplikasi Anda, atur LatencyMode properti .

Pengumpul sampah tidak mengumpulkan objek dengan nomor generasi yang lebih tinggi dari yang ditentukan oleh generation parameter . MaxGeneration Gunakan properti untuk menentukan nilai generationvalid maksimum .

Agar pengumpul sampah mempertimbangkan semua objek terlepas dari pembuatannya, gunakan versi metode ini yang tidak mengambil parameter.

Agar pengumpul sampah mengklaim ulang objek hingga pembuatan objek tertentu, gunakan GC.Collect(Int32) metode kelebihan beban. Saat Anda menentukan pembuatan maksimum, semua objek dikumpulkan.

Lihat juga

Berlaku untuk

Collect(Int32, GCCollectionMode, Boolean)

Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs

Memaksa pengumpulan sampah dari generasi 0 hingga generasi tertentu, pada waktu yang ditentukan oleh GCCollectionMode nilai, dengan nilai yang menentukan apakah koleksi harus diblokir.

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

Jumlah generasi tertua yang akan dikumpulkan sampah.

mode
GCCollectionMode

Nilai enumerasi yang menentukan apakah pengumpulan sampah dipaksa (Default atau Forced) atau dioptimalkan (Optimized).

blocking
Boolean

true untuk melakukan pemblokiran pengumpulan sampah; false untuk melakukan pengumpulan sampah latar belakang jika memungkinkan.

Pengecualian

generation tidak valid.

-atau-

mode bukan salah GCCollectionMode satu nilai.

Keterangan

Tabel berikut ini meringkas interaksi mode parameter dan blocking :

mode blocking is true blocking is false
Forced atau Default Pengumpulan pemblokiran dilakukan sesegera mungkin. Jika koleksi latar belakang sedang berlangsung dan generation adalah 0 atau 1, Collect(Int32, GCCollectionMode, Boolean) metode segera memicu pengumpulan pemblokiran dan kembali ketika koleksi selesai. Jika koleksi latar belakang sedang berlangsung dan generation adalah 2, metode menunggu hingga koleksi latar belakang selesai, memicu pemblokiran koleksi generasi 2, lalu kembali. Pengumpulan dilakukan sesegera mungkin. Metode Collect(Int32, GCCollectionMode, Boolean) meminta pengumpulan latar belakang, tetapi ini tidak dijamin; tergantung pada keadaannya, pengumpulan pemblokiran mungkin masih dilakukan. Jika pengumpulan latar belakang sudah berlangsung, metode akan segera kembali.
Optimized Pengumpulan pemblokiran dapat dilakukan, tergantung pada status pengumpul sampah dan parameter generation. Para sampah mencoba memberikan performa yang optimal. Pengumpulan dapat dilakukan, tergantung pada keadaan pengumpul sampah. Metode Collect(Int32, GCCollectionMode, Boolean) meminta pengumpulan latar belakang, tetapi ini tidak dijamin; tergantung pada keadaannya, pengumpulan pemblokiran mungkin masih dilakukan. Para sampah mencoba memberikan performa yang optimal. Jika pengumpulan latar belakang sudah berlangsung, metode akan segera kembali.

Jika panggilan ke Collect(Int32, GCCollectionMode, Boolean) metode melakukan pemblokiran penuh pengumpulan sampah, Anda juga dapat memampatkan tumpukan objek besar dengan mengatur GCSettings.LargeObjectHeapCompactionMode properti ke GCLargeObjectHeapCompactionMode.CompactOnce sebelum memanggil Collect metode .

Berlaku untuk

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs
Sumber:
GC.CoreCLR.cs

Memaksa pengumpulan sampah dari generasi 0 hingga generasi tertentu, pada waktu yang ditentukan oleh GCCollectionMode nilai, dengan nilai yang menentukan apakah koleksi harus memblokir dan memampatkan.

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

Jumlah generasi tertua yang akan dikumpulkan sampah.

mode
GCCollectionMode

Nilai enumerasi yang menentukan apakah pengumpulan sampah dipaksa (Default atau Forced) atau dioptimalkan (Optimized).

blocking
Boolean

true untuk melakukan pemblokiran pengumpulan sampah; false untuk melakukan pengumpulan sampah latar belakang jika memungkinkan.

compacting
Boolean

true untuk memampatkan tumpukan objek kecil; false hanya untuk menyapu.

Keterangan

Jika blocking adalah false, GC memutuskan apakah akan melakukan latar belakang atau memblokir pengumpulan sampah. Jika compacting adalah true, ia melakukan pemblokiran pengumpulan sampah.

Jika compacting adalah true, runtime memampatkan tumpukan objek kecil (SOH). Tumpukan objek besar (LOH) tidak dikompilasi kecuali GCSettings.LargeObjectHeapCompactionMode properti diatur ke GCLargeObjectHeapCompactionMode.CompactOnce. Perhatikan bahwa ini termasuk semua pemblokiran pengumpulan sampah, bukan hanya pengumpulan sampah pemblokiran penuh.

Anda dapat memanggil Collect(Int32, GCCollectionMode, Boolean, Boolean) metode untuk mengurangi tumpukan terkelola ke ukuran sekecil mungkin, seperti yang diilustrasikan oleh fragmen kode berikut.

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)

Menentukan true untuk compacting argumen menjamin pengumpulan sampah pemblokiran penuh yang memampatkan. GCSettings.LargeObjectHeapCompactionMode Mengatur properti untuk GCLargeObjectHeapCompactionMode.CompactOnce memastikan bahwa LOH dan SOH dikompilasi.

Berlaku untuk