2012-05-17 3 views
0

현재 문제의 원인을 찾으려고 시도하고 있습니다. 우리의 예외 처리가 부족하므로 오류의 출처를 추측합니다. 방법은 XmlTextReader 개체를 반환하는 경우 여기에 내 질문, 그 개체가 try/catch/finally 줄 바꿈 .close() 메서드를 마지막으로 래핑 된 경우 null 될?XmlTextReader 개체를 반환하면 .Close()를 호출 할 수 있습니까?

그렇다면 리소스를 올바르게 처리 할 수있는 방법은 무엇입니까? .Clone() 또는 .Copy() 메서드가 없다는 것을 알고 있습니다.이를 수행하는 다른 방법이 있습니까? XmlTextReader 및 XmlReader 개체를 삭제해도됩니까?

감사

답변

1

당신은/폐쇄 호출자에게 반환하기 전에 XmlReader을 배치하지 않아야합니다.

아니요, Dispose/Close은 개체에 null을 할당하지 않습니다. 개체는 릴리스 될 필요가있는 모든 리소스를 해제하도록 개체에 요청합니다.

XmlReader GetReader() 
{ 
    XmlRead reader = .... 

    // DO NOT dispose/close reader here with 
    // reader.Dispose() or using(reader){...} 

    return reader; 
} 

사용법 : 많은 종류라고 Dispose 후 데이터에 대한 액세스에 대비 한 보호 조치

using(var reader = GetReader()) {...} 

참고. .Net의 여러 클래스에서 사용되는 접근 방식은 Dispose이 호출 된 후 ObjectDisposedException으로 개체의 액세스 상태에 대한 모든 호출을 실패하는 것입니다.

+0

감사합니다. 그렇다면 XmlReader 및 XmlTextReader에서 .Close()를 호출하는 것에 신경 쓰지 마십시오. 그것이 응용 프로그램에서 지속적으로 호출되는 경우 결국 메모리 누수가 발생하지 않을까요? – ganders

+0

사용법에 따라 답변이 업데이트되었습니다. IDispsable을 구현하는 모든 객체에 Dispose (닫을 때도 같이 사용)를 호출합니다. 그러나 완료 한 후에는 적절한 시간에 완료해야합니다. 나는. 당신은 이미 처리 된 객체를 반환하기 위해'XmlReader.Create()'를 expcet하지 않습니다. 그렇습니까? –

+0

동의하지 않습니다. MSDN을 보면 Close 또는 Dispose에 의해 "Object Disposed Exception"이 발생하는 예외는 없습니다. 그래서 그것은 사실이 아닙니다. Close를 호출 할 때 아무런 부작용이 없다. – Darkonekt