IDisposable实现的方法什么时候被执行的
一,以什么是GC所认为的垃圾?
不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收
二,在仓储设计中,我们都知道非托管资源的手动释放,但继承的IDisposable的方法在什么时候实现?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GcDemo { class Program { static void Main(string[] args) { A a = new A(); var d = a.TT.T_Info_College.ToList(); //C c = new C(); //var e= c.TT.T_Info_College.ToList(); Console.ReadKey(); } } public class A : IDisposable { public TestEntities TT { get { return new TestEntities(); } } ~A() { Console.WriteLine("析构A"); var d = TT.T_Info_College.ToList(); Console.ReadKey(); } public A() { var tt = TT.T_Info_CollegeDetail.ToList(); } public void Dispose() { Console.WriteLine("A"); TT.Dispose(); } } public class C { public TestEntities TT { get { return new TestEntities(); } } ~C() { Console.WriteLine("析构C"); TT.Dispose(); var tt = TT.T_Info_College.ToList(); Console.ReadKey(); } public C() { var c = TT.T_Info_CollegeDetail.ToList(); } } }
三,根据以上代码,
1,两个输出都是托管资源已经被释放,则报错,
2,而Dispose执行是在析构函数之前,也就是在GC通过回收托管资源之前(GC是调用析构函数释放托管资源)