클래스 소멸자(Destructor)
- 객체가 소멸되기 전에 호출되어 객체에 부여된 메모리를 해제하는데 사용.
- 클래스는 하나의 소멸자만 가진다.
- 소멸자는 상속이나 오버로드 되지 않는다.
- 소멸자는 사용자가 호출할 수 없고 Garbage Collector가 자동으로 호출된다.
소멸자 선언
Ex)
Class book{
…
//소멸자
~book()
{
처리할 Code
}
}
소멸자는 암시적으로 Finalize() 메서드를 호출해서
Protected override void Finalize()
{
Try
{
…처리할 문장;
}
Finally
{
Base.Finalize();
}
}
#class를 생성할 때 가급적이면 빈 destructor를 만들지 않는 것 이 좋음.
Garbage Collector(=GC)
- 더 이상 사용되지 않는 개체의 메모리 해제를 위해 사용된다.
- 항상 원하는 시점에 메모리를 해제하는 것은 아니다.
Garbage Collector의 수행 단계
- GC가 관리코드에서 참조되는 개체를 찾기
- GC는 참조되지 않는 개체를 종료하려 함
- 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 |