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是调用析构函数释放托管资源)

posted @ 2017-10-27 14:55  叶丶梓轩  阅读(468)  评论(0编辑  收藏  举报