2011-03-03 2 views
1

이전 게시물에서 대량 PDF (1000 페이지 이상) 생성시 "로드 실패"오류가 게시되었습니다. 그럼 obj.Dispose() 내 문제가 해결되었습니다. 그래서, 어떤 사람이 닷넷에서 Dispose() 및 가비지 컬렉터의 실제 기능이 무엇인지 말해 줄 수 있습니다..NET에 자동 가비지 컬렉터가 있기 때문에 왜이 Dispose() 메소드가 필요합니까?

감사합니다,

+0

부모님, 하녀 또는 집사 **의 모든 **에 의존 할 수없는 것처럼 ** 모든 항목 **에 GC를 의지 할 수 없습니다. – BoltClock

+2

가능한 복제본 [C# : 개체를 처리하고 null로 설정해야합니까?] (http://stackoverflow.com/questions/2926869/c-do-you-need-to-dispose-of-objects- and-set-them-to-null) – GvS

답변

1

.NET 가비지 수집기는 관리되는 개체 (기본 .NET 개체)의 메모리를 관리하지만 관리하지 않으며 관리되지 않는 리소스를 직접 정리할 수도 없습니다. 관리되는 리소스는 가비지 수집기에서 암시 적으로 정리 된 리소스입니다. 이러한 리소스를 명시 적으로 릴리스하는 코드를 작성할 필요가 없습니다. 반면, 코드에서 명시 적으로 관리되지 않는 리소스 (파일 핸들, 데이터베이스 컬렉션 등)를 정리해야합니다.

+0

좋아,하지만 관리되지 않는 리소스에서 데이터를 가져오고 설정 한 getters/setters를 사용하여 객체를 작성한 다음 리소스를 삭제할 수있는 이유는 무엇입니까? –

0

이 질문을 참조 SAJ : How to dispose a class in .net?

는 IDisposable이 자유롭게 메모리와는 아무 상관이있다. 는 IDisposable이는 IDisposable을 구현

0

물건이 객체가 더 이상 필요 때마다 호출하지() 폐기가 놈이야 ... 관리되지 않는 리소스를 해제하기위한 패턴이다. 이 메서드는 할당 된 시스템 리소스를 해제하는 작업을 담당합니다. 이 패턴은 객체의 열렬한 컬렉션을 제공합니다.

그것은 좋은 코드 블록의 인스턴스화를 envolve하는 연습과 스 니펫으로 일회용 자원을 사용하고 있습니다 :

using (var disposable = new Disposable()) 
{ 
    // your code goes here 
} 

GC가 실행됩니다 때 그것이 필요 이상으로 자원을 유지 할 수 있다는 것을 알고하지 않습니다.

1

가비지 수집기는 개체에서만 작동합니다. Dispose는 비 관리 메모리가 클래스에 의해 할당 될 때 사용됩니다. 클래스가 사용되지 않을 때 수동으로 해제해야하기 때문입니다. dispose 패턴을 구현하지 않으면 메모리가 해제되지 않고 관리되지 않는 메모리가 메모리 누수가됩니다. 수행하지만 호출하지 않으면 실행중인 가비지 수집기 (및 Dispose 호출)에 의존하여 관리되지 않는 메모리를 해제합니다. 필요한 시간 내에 발생하거나 발생하지 않을 수 있습니다. 개체가 범위를 벗어날 때 Dispose 메서드가 호출되도록하기 위해 using 문에 IDisposable을 구현하는 클래스의 개체를 래핑하는 것이 좋습니다 (거의 항상).

using (var obj = new DisposableObject()) 
{ 
    ... 
} 
관련 문제