zoukankan      html  css  js  c++  java
  • 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是调用析构函数释放托管资源)

  • 相关阅读:
    程序员外包网站
    网络测试
    数据库系统在线网课
    字体
    正则表达式测试工具
    豆瓣Top250数据可视化
    前端模板
    豆瓣Top250电影爬取
    PyCharm激活码
    爬虫禁止访问解决方法(403)
  • 原文地址:https://www.cnblogs.com/May-day/p/7576325.html
Copyright © 2011-2022 走看看