GC垃圾回收
c#代码垃圾回收:
托管对象:GC回收,
非托管对象:程序员自己释放
class Program { static void Main(string[] args) { //using (GCTest gc=new GCTest()) //{ // int a = 1; //} method(); GC.Collect();//强制GC回收垃圾,触发对象析构函数,对象终结器,即~GCTest()方法 Console.ReadKey(); } static void method() { GCTest gc = new GCTest("a"); gc.Dispose(); GCTest gc2 = new GCTest("b"); gc2.Dispose(); } } class GCTest : IDisposable { private string Name { get; set; } public GCTest(string name) { this.Name = name; } #region IDisposable Support private bool disposedValue = false; // 要检测冗余调用 protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: 释放托管状态(托管对象)。 } // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。 // TODO: 将大型字段设置为 null。 disposedValue = true; } } // TODO: 仅当以上 Dispose(bool disposing) 拥有用于释放未托管资源的代码时才替代终结器。 //~GCTest() //{ // // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。 // Dispose(false); //} // 添加此代码以正确实现可处置模式。 public void Dispose() { // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。 Dispose(true); // TODO: 如果在以上内容中替代了终结器,则取消注释以下行。 GC.SuppressFinalize(this);//防止GC重复收集垃圾,执行此代码,GC就不执行~GCTest()了 } #endregion }