GC.Collect () 소개 및 일반 사용 방법

5746 단어 GC
익숙하다.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");

        }

    }

}

좋은 웹페이지 즐겨찾기