手动监视对象的生存周期--------------C#

接下来,写一个拓展方法,监视对象在什么时候会被回收掉

 public static class GCWatcher
    {

        private static readonly ConditionalWeakTable<object, NotifyWhenGCd<string>> s_wt = new ConditionalWeakTable<object, NotifyWhenGCd<string>>();

        private sealed class NotifyWhenGCd<T>
        {
            private readonly T m_value;
            internal NotifyWhenGCd(T value)
            {
                m_value = value;
            }
            public override string ToString()
            {
                return m_value.ToString();
            }

            ~NotifyWhenGCd()
            {
                Console.WriteLine("DC'd"+m_value);
            }

        }


        public static T GCWatch<T>(this T @object,string tag) where T:class
        {
            s_wt.Add(@object, new NotifyWhenGCd<string>(tag));
            return @object;
        }
    }

 

 

在类中这样使用它,在对象回收时,会打印想要的提示语

 

    static void Main(string[] args)
        {
            object obj = new object().GCWatch("终于释放啦");
            obj = null;
            GC.Collect();
   
            Console.ReadKey();

        }

 

转载于:https://www.cnblogs.com/xiaoleye/p/7416641.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值