GC.Collect()简介及一般用法

熟悉.NET的开发者们应该都知道里面有一个GC.Collect()吧,它的功能就是强制对所有代进行垃圾回收。下面介绍与之相关的几个术语:

何谓代?

代是指托管内存中不同的区域,对象越老位于的代越靠后,比如:第一次垃圾回收后某个对象未被回收,它可能就会从0代移动到1代,以此类推。
何谓垃圾?

垃圾就是只没有任何对象再和他有引用关系,专业点说就是从这个对象开始找其引用,一直找,如果找到它正在引用一个根,那么这个就是不是垃圾,如果找不到根则这个对象就是垃圾。

何谓根?

根就是指一个存储位置,包含指向某个引用类型的指针。比如静态变量,全局变量就是根,当前寄存器里面的对象就是根,还有当前调用栈上的参数,局部变量都是根。

另外,垃圾回收开始的时候当前所有线程都将被挂起,开始收集托管堆上的垃圾,收集完了还要压缩内存,然后等待垃圾回收结束以后再恢复这些线程,从这个角度来说,还是少调用垃圾回收,但是不是不能调,要视情况而定。

GC.Collect()的一般用法如下面源码如示:


......

dpFormulaList.Clear();
dpFormulaList = null;
inputs.Clear();
inputs = null;
GC.Collect();

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;



namespace TestDOME

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }



        private void button1_Click(object sender, EventArgs e)

        {

            using(Demo de2 = new Demo())

            {

                de2.dt();

            }

            Demo de3 = new Demo();

            de3.Dispose();



            Demo1 d1 = new Demo1();

            d1 = null;//设置为空时才可以手动释放

            GC.Collect();

        }

    }



    public class Demo : IDisposable//继承接口

    {

        public void dt()

        {

 

        }

        ~Demo()

        {

            Dispose(false);

        }



        #region IDisposable Members



        public void Dispose()

        {

            Dispose(true);

            GC.SuppressFinalize(true);

        }

        private bool _disposed = false;//资源释放标志

        protected virtual void Dispose(bool disposeManageResourse)

        {

            if (!_disposed)

            {

                if (disposeManageResourse)

                {

                    //释放托管资源

                    MessageBox.Show("回收资源1");

                }

                _disposed = true;

            }

        }





        #endregion

    }



    public class Demo1

    {

        ~Demo1()

        {

            MessageBox.Show("回收资源d1");

        }

    }

}

 

你可能感兴趣的:(GC)