본문 바로가기

C#.NET

클래스 소멸자와 Garbage Collector

클래스 소멸자(Destructor)

 

  • 객체가 소멸되기 전에 호출되어 객체에 부여된 메모리를 해제하는데 사용.
  • 클래스는 하나의 소멸자만 가진다.
  • 소멸자는 상속이나 오버로드 되지 않는다.
  • 소멸자는 사용자가 호출할 수 없고 Garbage Collector가 자동으로 호출된다.

     

 

소멸자 선언

Ex)

Class book{

//소멸자

~book()

{

처리할 Code

}

}

 

소멸자는 암시적으로 Finalize() 메서드를 호출해서

 

Protected override void Finalize()

{

Try

{

…처리할 문장;

}

Finally

{

Base.Finalize();

}

}

#class를 생성할 때 가급적이면 빈 destructor를 만들지 않는 것 이 좋음.

 

 

Garbage Collector(=GC)

  • 더 이상 사용되지 않는 개체의 메모리 해제를 위해 사용된다.
  • 항상 원하는 시점에 메모리를 해제하는 것은 아니다.

    Garbage Collector의 수행 단계

  1. GC가 관리코드에서 참조되는 개체를 찾기
  2. GC는 참조되지 않는 개체를 종료하려 함
  3. GC는 참조되지 않는 개체를 해제하고 해당 메모리를 회수 및 수집하는 동안, GC는 관리코드 안에서 해당 개체에 대해서 하나 이상의 참조가 있는 것을 발견하면 해당 개체의 메모리를 해제하지 않는다.

     

코드 분석

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

 

namespace Garbage_Collector

{

class Program

{

//CONST 상수를 이용해서 초기화

private const int maxGarbage = 10;

 

static void Main(string[] args)

{

//몇 몇 개체를 메모리에 할당

Program.MakesomeGarbage();

Console.WriteLine("메모리 회수 전 사용되고 있는 메모리양 :{0} ", GC.GetTotalMemory(false));

 

//메모리 강제 회수

GC.Collect();

 

//GC.GetTotalMemory(ture)는 시스템에 가비지를 수집하고 객체를 종료할 동안 잠시 기다린 후 반환

Console.WriteLine("메모리 해제 후 사용되고 있는 메모리 양 :{0} ",GC.GetTotalMemory(true));

 

Console.ReadLine();

}

 

static void MakesomeGarbage()

{

DirectoryInfo dinfo;

 

for ( int i=0; i<maxGarbage;i++)

{

//DirectoryInfo 객체 생성

dinfo=new DirectoryInfo(@"C:\Mydir"+Convert.ToString(i));

}

}

}

}

'C#.NET' 카테고리의 다른 글

DataBase Access 기술동향  (0) 2009.05.13
Transaction 이용하기  (0) 2009.05.13
MSSQL LOCK  (0) 2009.05.13
:::::[트랜잭션(Transaction)]:::::  (0) 2009.05.13
Stored Procedure를 이용한 DB Handling  (1) 2009.05.13
클래스 멤버로의 접근제한하기  (0) 2009.05.08
NotifyIcon  (0) 2009.05.08
트리뷰(TreeView)  (0) 2009.05.07
List View  (0) 2009.05.07
DateTimePicker_Control  (0) 2009.05.06