2013-08-27 1 views
0

X509Store 인증서 저장소를 초기화하고 해당 Close() 메서드를 사용하지 않는 경우이 의미는 무엇입니까?X509Store.Close 메서드를 사용하지 않는다는 의미는 무엇입니까?

코드 예 given in documentation에서 Close 메서드를 호출하려면 try..finally 블록을 사용하지 않습니다. 이 인증서 저장소가 해제되어야하는 경우, 왜 IDisposable에서 파생되도록 설계된 클래스의 API가 없거나 객체가 범위를 벗어날 때이 클래스에 암시 적 소멸자가없는 이유는 무엇입니까?

답변

1

내부적으로 Close 메서드는 관리되지 않는 개체를 가리키는 핸들을 해제합니다.

public void Close() 
{ 
    if ((this.m_safeCertStoreHandle != null) && !this.m_safeCertStoreHandle.IsClosed) 
    { 
     this.m_safeCertStoreHandle.Dispose(); 
    } 
} 

메모리 누수를 피하기 위해 Close 메서드를 호출하고 싶습니다.

+0

소멸자에서이 작업을 수행하지 않는 이유는 실제로 제 질문이었습니다. btw 어디에서 소스 코드를 가져 왔습니까? –

+0

있음. 닷넷 IDisposable destructors.See 선호합니다 : http://stackoverflow.com/questions/456213/destructor-vs-idisposable 난 Ilispy decompiler를 사용하여 코드를 가지고. http://ilspy.net/ – Oscar

+0

그렇다면이 API가 IDisposable로 설계되지 않은 이유는 무엇입니까? –

4

.NET 4.6에서 X509Store이 수정되어 이제 IDisposable을 구현했습니다.

Dispose 구현은 Close()을 호출합니다. MSDN에서

:

는 .NET 프레임 워크 4.6을 시작으로,이 유형으로 IDisposable 인터페이스를 구현합니다. 유형 사용이 끝나면 직접 또는 간접적으로 처분해야합니다.