GC 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
控制系統記憶體回收行程,它是自動回收未使用之記憶體的服務。
public ref class GC abstract sealed
public ref class GC sealed
public static class GC
public sealed class GC
type GC = class
Public Class GC
Public NotInheritable Class GC
- 繼承
-
GC
範例
下列範例會使用數個 GC 方法來取得有關未使用物件區塊的產生和記憶體資訊,並將它列印至控制台。 然後會收集未使用的物件,並顯示產生的記憶體總計。
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
備註
如需此 API 的詳細資訊,請參閱 GC 的補充 API 備註。
屬性
MaxGeneration |
取得系統目前支援的最大層代編號。 |
方法
AddMemoryPressure(Int64) |
告知執行階段,在排定記憶體回收時應考慮的大量 Unmanaged 記憶體配置。 |
AllocateArray<T>(Int32, Boolean) |
配置陣列。 |
AllocateUninitializedArray<T>(Int32, Boolean) |
如果可能的話,會在略過零初始化的情況下配置陣列。 |
CancelFullGCNotification() |
取消註冊記憶體回收通知。 |
Collect() |
強制立即執行所有層代的記憶體回收。 |
Collect(Int32) |
強制立即執行層代 0 至指定層代的記憶體回收。 |
Collect(Int32, GCCollectionMode) |
在 GCCollectionMode 值所指定的時間,強制執行層代 0 至指定層代的記憶體回收。 |
Collect(Int32, GCCollectionMode, Boolean) |
在 GCCollectionMode 值 (含有指定是否應該封鎖回收作業的值) 所指定的時間,強制執行從層代 0 到指定之層代的記憶體回收。 |
Collect(Int32, GCCollectionMode, Boolean, Boolean) |
在 GCCollectionMode 值 (含有指定是否應該封鎖及壓縮回收作業的值) 所指定的時間,強制執行從層代 0 到指定之層代的記憶體回收。 |
CollectionCount(Int32) |
傳回指定物件層代已發生記憶體回收的次數。 |
EndNoGCRegion() |
結束無 GC 區域延遲模式。 |
GetAllocatedBytesForCurrentThread() |
取得自目前執行緒的存留期開始,已配置給該執行緒的位元組總數。 |
GetConfigurationVariables() |
取得垃圾收集行程所使用的組態。 |
GetGCMemoryInfo() |
取得記憶體回收的記憶體資訊。 |
GetGCMemoryInfo(GCKind) |
取得記憶體回收的記憶體資訊。 |
GetGeneration(Object) |
傳回指定物件的目前層代編號。 |
GetGeneration(WeakReference) |
傳回指定弱式參考之目標的目前層代編號。 |
GetTotalAllocatedBytes(Boolean) |
取得處理序存留期間配置的位元組計數。 傳回的值不包含任何原生配置。 |
GetTotalMemory(Boolean) |
擷取排除片段的堆積大小。 例如,如果 GC 堆積大小總計是 100 mb,而片段,也就是可用物件佔用的空間,則此 API 會報告 60mb。 參數會指出這個方法是否可以先等待短暫間隔後再傳回,以便讓系統回收記憶體和最終處理物件。 |
GetTotalPauseDuration() |
取得從進程開始以來,GC 中暫停的總時間量。 |
KeepAlive(Object) |
參考指定的物件,使它從目前常式的開始至呼叫這個方法時都不適合記憶體回收。 |
RefreshMemoryLimit() |
指示垃圾收集行程偵測系統上的各種記憶體限制,以重新設定本身。 |
RegisterForFullGCNotification(Int32, Int32) |
指定當情況需要完整記憶體回收時和回收完成時,應引發記憶體回收通知。 |
RegisterNoGCRegionCallback(Int64, Action) |
在未配置任何 GC 區域中的特定記憶體數量時,註冊要叫用的回呼。 |
RemoveMemoryPressure(Int64) |
告知執行階段,Unmanaged 記憶體已釋放,所以排定記憶體回收時不需要再考慮它。 |
ReRegisterForFinalize(Object) |
要求系統為指定物件 (先前已經為其呼叫 SuppressFinalize(Object)) 呼叫完成項。 |
SuppressFinalize(Object) |
要求 Common Language Runtime 不要為指定之物件呼叫完成項。 |
TryStartNoGCRegion(Int64) |
嘗試在有指定數量記憶體可用時,於執行關鍵路徑期間,禁止記憶體回收。 |
TryStartNoGCRegion(Int64, Boolean) |
嘗試在有指定數量記憶體可用時,於執行關鍵路徑期間,禁止記憶體回收,並控制在最初沒有足夠的記憶體可用時,記憶體回收行程是否執行完全封鎖記憶體回收。 |
TryStartNoGCRegion(Int64, Int64) |
嘗試在大型物件堆積與小型物件堆積有指定數量記憶體可用時,於執行關鍵路徑期間,禁止記憶體回收。 |
TryStartNoGCRegion(Int64, Int64, Boolean) |
嘗試在大型物件堆積與小型物件堆積有指定數量記憶體可用時,於執行關鍵路徑期間,禁止記憶體回收,並控制在最初沒有足夠的記憶體可用時,記憶體回收行程是否執行完全封鎖記憶體回收。 |
WaitForFullGCApproach() |
傳回註冊通知的狀態,以判斷 Common Language Runtime 是否即將執行完整的封鎖記憶體回收。 |
WaitForFullGCApproach(Int32) |
在指定的逾時期間傳回註冊通知的狀態,以判斷 Common Language Runtime 是否即將執行完整的封鎖記憶體回收。 |
WaitForFullGCApproach(TimeSpan) |
在指定的逾時期間傳回註冊通知的狀態,以判斷 Common Language Runtime 是否即將執行完整的封鎖記憶體回收。 |
WaitForFullGCComplete() |
傳回註冊通知的狀態,以判斷 Common Language Runtime 是否已完成完整的封鎖記憶體回收。 |
WaitForFullGCComplete(Int32) |
在指定的逾時期間傳回註冊通知的狀態,以判斷 Common Language Runtime 是否已完成完整的封鎖記憶體回收。 |
WaitForFullGCComplete(TimeSpan) |
傳回有關封鎖垃圾收集是否已完成的已註冊通知狀態。 可能會無限期等候完整集合。 |
WaitForPendingFinalizers() |
暫止目前的執行緒,直到處理完成項佇列的執行緒已經清空該佇列為止。 |