Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

IDisposable, SuppressFinalize

2016. 4. 19. 10:03programming/개발 일반

728x90

가비지콜렉션(Garbage Collection)


C# 프로그래머는 객체를 메모리로부터 직접 해제하지 않는다. ( C# 언어에는 'delete' 키워드가 없다. )
.NET 객체는 관리 힙(managed heap) 이라는 이름의 메모리 영역에 할당되고, '더 이상 필요 없을 때' 런타임에 의해서 자동으로 해제된다.

가비지 컬렉션은 이런 필요 없는 메모리를 비우기 위해서 수행되는 것을 말한다.
가비지 컬렉션이 일어나면, 런타임이 관리 힙에 있는 모든 객체를 조사해서 해당 응용 프로그램에서 사용 중인지 아닌지를 가린다.



new 연산자를 이용해서 관리 힙에 객체를 하나 위치시킬 때, 런타임은 자동적으로 이 객체가 사용자 지정 Finalize() 메소드를 지원하는지 검사하게 된다.
만약 지원한다면 이 객체는 종결 가능한 것으로 표시되고, 이 객체에 대한 포인터가 종료 대기열(finalization queue)이라는 이름의 내부 대기열에 저장된다.

가 비지 컬렉터가 객체를 메모리로부터 해제할 때라고 판단할 때, 가비지 컬렉터는 종료 대기열 목록에 기재되어 있는 모든 항목을 검사하고, 이 객체를 힙으로 부터 finalization reachable table 이라는 이름의 또다른 CLR 관리 구조로 복사한다.
이때 별도의 스레드가 실행되어 다음 번 가비지 컬렉션시 테이블에 있는 각 객체의 Finalize() 메소드를 호출한다.



Disposable 인터페이스

명시적 소멸 루틴을 지원하는 모든 객체들에 일관성을 제공할 수 있도록, .NET 클래스 라이브러리에는 Dispose() 라는 이름의 멤버 하나를 갖는 IDisposable 이라는 이름의 인터페이스가 정의되어 있다.



다음 예제에서는 사용 하는 방법의 SuppressFinalize 에서 호출 되 고 중복 가비지 수집을 방지 하기 위해 리소스 클래스에서 메서드.이 예에서는 사용 된 관리 되는 리소스를 모두 해제 (즉, 구현 하는 개체 IDisposable) .



public class OOOO : IDisposable

{

public void Dispose()

{

GC.SuppressFinalize(this);

}

}


Garbage collection: GC reclaims the memory used by the object when the object is referenced no more.

Dispose: a method from the IDisposable interface that is to release all managed and unmanaged resources when the programmer calls it (either directly or indirectly via a using block).

Finalizer: a method to release all unmanaged resources. Called by the GC before reclaiming the memory.

Managed resource: any .NET class that implements the IDisposable interface, like Streams and DbConnections.

Unmanaged resource: the stuffing wrapped in the Managed Resource classes. Windows handles are the most trivial examples.

728x90

'programming > 개발 일반' 카테고리의 다른 글

debug, realse 모드 차이점  (0) 2016.04.13