GC.Collect Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
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 generation
valid 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
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.