2017-01-24 1 views
0

System.Net.NetworkCredential에는 Dispose 메서드가 없습니다. 이 클래스를 사용하여 생성 된 객체를 올바르게 처리하는 가장 좋은 방법은 무엇입니까?C# System.Net.NetworkCredential

당신은 단지 시도의 마지막 부분에 null로 객체 참조를 설정할 수

+4

IDisposable.Dispose가 없으면 실제로 처분해야한다고 생각하는 이유는 무엇입니까? –

+0

"처분"이란 무엇이 당신에게 "IDisposable"을 구현하지 않는 것을 의미합니까? –

답변

1

개체에 IDisposable이 구현되지 않은 경우 개체를 사용하면 개체를 처리하는 올바른 방법은 범위를 벗어나는 것입니다.

IDisposable은 개체가 보유하고있는 관리되지 않는 리소스를 정리할 수 있도록 설계되었습니다. 오브젝트가 관리 자원 만 포함하는 경우, 처리 할 이유가 없습니다. 모든 것이 가비지 컬렉터에 의해 정리됩니다. MSDN에서

:

이 인터페이스의 주요 용도는 관리되지 않는 리소스를 해제하는 것입니다. 가비지 수집기는 해당 객체가 더 이상 사용되지 않을 때 관리 객체에 할당 된 메모리를 자동으로 해제합니다. 그러나 가비지 수집이 발생할 때를 예측할 수는 없습니다 ( ). 또한 가비지 수집기는 창 핸들 또는 열린 파일 및 스트림과 같은 관리되지 않는 리소스에 대해 알지 못합니다.

Dispose 메서드를 사용하여 의 관리되지 않는 리소스를 가비지 수집기와 함께 명시 적으로 해제 할 수 있습니다. 객체의 소비자는 객체가 더 이상 필요하지 않을 때 이 메소드를 호출 할 수 있습니다.

+0

그리고 이것이 내가 오전 1시에 프로그래밍 작업을 할 필요가없는 이유입니다. – JamesNT

2

JamesNT.

var myCredential = new NetworkCredential(); 

try 
{ 
    //Do stuff here 
} 
finally 
{ 
    myCredential = null; 
} 

그러나 .NET 가비지 수집은 범위를 벗어나면 컬렉션에 대한 개체 참조를 표시해야합니다.

+1

사실 런타임은 마지막 사용 후 개체를 수집 할 수 있습니다. try/last로 랩핑하고 만들고있는 변수에 null을 할당하면 오랫동안 수집 할 수 없게됩니다. 이 방법을 사용하면 객체의 컬렉션을보다 결정 론적으로 만들 수 있는지 알 수 없습니다. –

+0

고마워요 ... 재미 있어요! – Wheels73

관련 문제