C# GC垃圾自动回收(陷阱)

测试类:

        public class Demo : IDisposable
        {
            ~Demo()
            {
                MessageBox.Show("释放非托管资源");
            }
        }

按照其他阵友所述,若对象无可用引用指针(没有任何指针指向该对象) GC会自动销毁对象(立即)

可惜并不如人愿,等待很长一段时间 结果也是未销毁,窗口被销毁时才开始销毁此对象

        protected override void OnLoad(System.EventArgs e)
        {
            new Demo();
            /*
            Demo o = new Demo();
            o = null;
             */
        }
你或许会问如何释放?GC.Collect() 

        protected override void OnLoad(System.EventArgs e)
        {
            Demo o = new Demo();
            o = null;
            GC.Collect();
        }

但是有个问题,GC.Collect() 释放的是所有未被指针指向的对象

这样做势必会影响稳定型或执行效率,所以我们只能采用对特定

对象的 GC.Collect 这个吗,仁者见仁.智者见智  开个小玩笑,

也不是什么太大的事情,当然用MDIL代码回收那绝对很爽了,不过不介绍这个东西

如下代码可以立即回收指定的对象而不必担心稳定性或执行能力降低

        protected override void OnLoad(System.EventArgs e)
        {
            Demo o = new Demo();
            int gid = GC.GetGeneration(o);
            o = null;
            GC.Collect(gid);
        }





 
 

你可能感兴趣的:(C#)