2014-11-21 2 views
2

그래서 WebClient를 using 문으로 묶었습니다. 하지만 갑자기 내 개체 IDisposable 구현하고 사용하여 문장에 싸여 경우 이벤트에서 구독을 취소해야합니까 궁금해?웹 클라이언트를 처분하는 경우 WebClient의 이벤트 구독을 취소해야합니까

다음은 현재 내 WebClient을 사용하는 방법에 대한 예제 코드입니다. 이 코드는 이벤트로부터의 가입을 취소하지 않았기 때문에 메모리 누수가 발생합니까? 아니면 dispose 메소드가이를 처리합니까?

using (WebClient wc = new WebClient()) 
{ 
    wc.DownloadProgressChanged += ((sender, args) => 
    { 
     //monitor something 
    }); 
    wc.DownloadFileCompleted += ((sender, args) => 
    { 
     //do something 
    }); 
    wc.DownloadFileAsync(new Uri(string.Format("{0}/{1}", Settings1.Default.WebPhotosLocation, Path.GetFileName(f.FullName))), filePath); 
} 
+0

수동으로 처리해야합니다. –

+1

@SriramSakthivel 댓글을 확대 해주세요. '그것'은 무엇과 관련이 있습니까? 내 'WebClient'는 using 문을 통해 처리됩니다. 이벤트 처리기에 대해서는 해당 객체를 처리 할 수 ​​없습니다. – user1

+0

비동기 작업이 완료되기 전에 WebClient를 삭제하고 있습니다 (DownloadFileAsync). 합법적인지 확신 할 수 없습니다. 또한 이벤트 핸들러가 인스턴스 메소드를 가리키면 이벤트 핸들러가'Dispose'에서 제거되지 않습니다. 그런 다음 인스턴스는 웹 클라이언트가 GC 될 때까지 GC되지 않습니다. –

답변

2

아니요, 필요 없습니다. GC에서 WebClient를 수집하면 모든 이벤트 처리기가 정리됩니다. GC가 발생하기 전에 이벤트가 발생하지 않아 처리기가 호출되지 않으므로 아무런 해를 끼치 지 않습니다.

관련 문제