2013-01-18 2 views
4

이 질문에 대한 답변을 찾을 수 없습니다.XmlNodeList를 일회용으로 사용하는 이유는 무엇입니까?

호기심에서 벗어나서 왜 XmlNodeList class은 .NET 4.5에서 IDisposable을 구현합니까? 이전 버전에서는 없었습니다.

+1

디 컴파일 된 코드를 살펴보면 부모 문서가 변경되면 실행되는 이벤트의 등록을 취소하는 것과 관련이있는 것으로 보입니다. 그러나 나는 이벤트 처리기가 정확히 무엇을하는지, 왜 (호출 된 메서드가'ConcurrencyCheck()'인지)를 이해할 수 없었다. – svick

+1

4.0 버전에서 컴파일되었지만 4.5 버전에서 실행되는 기존 제품의 성능 문제가 큰 것으로 나타났습니다. Uncollected XmlNodeLists는 파이널 라이저 큐에서 끝났습니다. IDisposable에 부드러운 캐스트가 유일한 합리적인 수정 인 것으로 보입니다. –

답변

1

IEnumerator<T>IDisposable하지만 IEnumerator하지 않는 구현하는 것과 같은 이유로 대부분의 경우 - 이전 버전이 작성된 전에 하나는 A 구현 정리를해야 할 상황을 생각 저자하지만 공장은 이러한 구현인지는 몰라도 반환 그러한 필요에 대해. 예를 들어, 클래스는 파일 이름을 수락하고 해당 파일에서 "라이브"XmlNodeList을 제공 할 수 있습니다. XmlListIDisposable.Dispose 메서드는 기본 파일을 닫습니다. 더 빨리이기 때문에, 그 것은 아마도 IDisposable 자체를 구현해야한다

IDisposable asDispos = thing as IDisposable; 
if (asDispos != null) 
    asDispos.Dispose(); 

과 그렇지 않은, 많은 경우 : 인터페이스 또는 추상 클래스의 사용자의 상당 부분은 다음과 같은 코드를 사용해야하는 경우 IDisposable.Dispose을 구현할 수도 있고 구현하지 않을 수도있는 클래스를 캐스팅하려고 시도하는 것보다 IDisposable을 구현하는 것으로 알려진 클래스에서 무조건 IDisposable.Dispose을 호출 할 수 있습니다.

관련 문제