屬性
GC.MaxGeneration:獲取系統當前支持的最大代數。
方法
GC.GetTotalMemory(bool forceFullCollection) 方法
true表示該方法先做垃圾收集操作,之后才計算出受控代碼分配的字節數。false表示不做垃圾收集,直接計算出受控代碼分配的字節數。
GC.Collect
垃圾回收是基於歷史經驗了,當發生非重復性事件的時候,垃圾自動回收就變的不准確,這時候可用采用手動調用GC.Collect方法清除垃圾。例如在用戶保存一個數據之后強制執行一次GC.Collect方法。
GC.Collect(); //強制對所有代進行即時垃圾回收。
Collect(Int32) 強制對 0 代到指定代進行即時垃圾回收。
Collect(Int32, GCCollectionMode) 強制在 GCCollectionMode 值所指定的時間對 0 代到指定代進行垃圾回收。
Collect(Int32, GCCollectionMode, Boolean) 在由 GCCollectionMode 值指定的時間,強制對 0 代到指定代進行垃圾回收,另有數值指定回收是否應該為阻礙性。
Collect(Int32, GCCollectionMode, Boolean, Boolean) 在由 GCCollectionMode 值指定的時間,強制對 0 代到指定代進行垃圾回收,另有數值指定回收應該為阻礙性還是壓縮性。
GCCollectionMode:指定垃圾收集是強制的(Default或Forced指回收0~指定的代)還是optimized優化(指能釋放大內存和減少碎片化才執行優化)。
using System.Runtime; //查看GC的類型,以及工作方式。該類在using System.Runtime;命名空間 在.json或xml文件中修改 Console.WriteLine($"IsServerGC:{GCSettings.IsServerGC}");// 釋放是服務器GC Console.WriteLine($"IsServerGC:{GCSettings.LatencyMode}");// 工作方式 FGClass fG = new FGClass(); fG.MakeGarbage(); Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// 獲取當前垃圾對象所在的代 //檢索當前認為要分配的字節數。參數指示此方法是否可以在返回之前等待一個短時間間隔,以允許系統收集垃圾和結束對象。 Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");// Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// GC.Collect(0);//回收第0代 Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");// Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// GC.Collect(2);//回收0~2代 Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");// Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// Console.Read(); public class FGClass { Version vt; public void MakeGarbage() { for (int i = 0; i < 100; i++) { vt = new Version(); } } }
GC.CollectionCount()返回自啟動進程以來已經對指定代進行的垃圾回收次數。
以下這些方法是大對象回收時候用到:
CancelFullGCNotification
RegisterForFullGCNotification
WaitForFullGCApproach
WaitForFullGCComplete
AddMemoryPressure和RemoveMemoryPressure
這兩個方法主要用於本地資源,比如一個位圖占用了50M本地內存,但是托管對象只包含一個HBitMap(4字節或8字節)。但CRL並不知道這個內存壓力,它可能允許你分配數百個位圖,因為它們占用的托管內存太少了。這兩個方法的目的就是要告訴GC它實際的本地資源用了多少內存量,GC知道這個信息后會調整它的垃圾回收策略,當壓力變大時,他就強制執行垃圾回收。