IDisposable 에 대해서..

Shawn Farkas

CLR(공용 언어 런타임)이 관리 코드 개발자의 생산성 향상에 가장 크게 기여하는 부분 중 하나는 바로 관리되는 힙에 할당된 메모리가 더 이상 사용되지 않을 경우 GC(가비지 수집기)를 통해 정리된다는 점입니다. 따라서 개발자는 메모리 누수, 해제된 메모리 사용 시도, 이중 메모리 회수 등으로 인해 발생하는 여러 가지 어려운 문제를 해결하기 위해 시간을 허비하지 않아도 됩니다. 그러나 가비지 수집기는 메모리 누수를 방지하는 데 효과적인 도구이지만 회수가 필요한 다른 유형의 리소스에 대해서는 아무 기능도 제공하지 않습니다. 예를 들어 가비지 수집기는 파일 핸들을 닫거나 CoAllocTaskMem과 같은 API를 사용하여 관리되는 힙 외부에 할당된 메모리를 해제할 수 없습니다.
이러한 유형의 리소스를 관리하는 개체는 리소스가 더 이상 필요하지 않을 때 해제할 방법이 필요합니다. 이를 위해서는 System.Object의 Finalize 메서드를 다시 정의하여 이 개체에 관련된 리소스를 가비지 수집기에서 수집하도록 설정해야 합니다. 참고로 C#의 경우 메서드를 직접 다시 정의하는 대신 C++의 소멸자 구문인 ~MyObject를 사용할 수 있습니다. 클래스에 종료자가 있으면 이러한 유형의 개체가 수집되기 전에 가비지 수집기에서 개체의 종료자를 호출하여 해당 개체가 점유하고 있는 리소스를 모두 정리할 수 있습니다.
하지만 이 시스템에서는 가비지 수집기가 능동적으로 실행 시점을 결정하지 않으므로, 개체에 대한 마지막 참조가 사라진 후에도 개체가 장시간 종료되지 않을 수 있다는 문제점이 있습니다. 따라서 개체가 데이터베이스 연결과 같이 중요하거나 민감한 리소스를 점유하고 있는 경우에는 이러한 시스템이 적합하지 않습니다. 예를 들어 사용 가능한 연결이 10개뿐이고 개체가 그 중 하나를 점유하고 있다면 가비지 수집기에서 종료자 메서드를 호출할 때까지 기다리지 말고 가능한 한 빨리 연결을 해제해야 합니다.

more..

Posted by 라맨땅

2009/01/22 16:21 2009/01/22 16:21
Response
No Trackback , No Comment
RSS :
http://www.amidala.user.to/blog/rss/response/48

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

Leave a comment
« Previous : 1 : ... 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : ... 60 : Next »

Archives

Authors

  1. 라맨땅

41

21

-30 days

today : 9