using System; using System.Collections.Generic; using System.Text; namespace TestGC { class Program { static void Main(string[] args) { ShowGenerationDemo(); } static void ShowGenerationCollectionInfo() { Console.WriteLine("Total Memory : {0}", GC.GetTotalMemory(false)); for(int i = 0 ; i<= GC.MaxGeneration; i++) { Console.WriteLine("{0} times garbage collection have been done at generation {1}", GC.CollectionCount(i), i); } } public static void ShowGenerationDemo() { Console.WriteLine("Initial Info ...................."); int generationCount = GC.MaxGeneration + 1; Console.WriteLine("Total Generation: {0}", generationCount); ShowGenerationCollectionInfo(); GenObj genObj = new GenObj("Gen Sample Obj"); genObj.DisplayGernerationInfo(); Console.WriteLine(".................................../n"); for (int i = 0; i < generationCount; i++) { GC.Collect(i); Console.WriteLine("After Garbage Collection On Generation {0}",i); genObj.DisplayGernerationInfo(); ShowGenerationCollectionInfo(); Console.WriteLine(); } //set the object to null genObj = null; for (int i = 0; i < generationCount; i++) { GC.Collect(i); Console.WriteLine("After Garbage Collection On Generation {0}", i); GC.WaitForPendingFinalizers(); ShowGenerationCollectionInfo(); Console.WriteLine(); } Console.WriteLine("Done!"); Console.Read(); } } } using System; using System.Collections.Generic; using System.Text; public class GenObj { private string _name = string.Empty; public GenObj(string name) { this._name = name; } public void DisplayGernerationInfo() { Console.WriteLine("{0} is in generation {1}",this._name,GC.GetGeneration(this)); } } 运行结果: