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");
        }
    }
}

 

posted @ 2010-12-28 00:06  Jones.Zhao  阅读(23846)  评论(0编辑  收藏  举报