2012-05-17 23 views
0

我處於綁定狀態,正在嘗試查找問題的來源。我們的異常處理是缺乏的,所以我在猜測錯誤的來源。這裏是我的問題,如果一個方法返回一個XmlTextReader對象,那麼如果該對象封裝在try/catch/finally中,那麼finally代碼塊執行.Close()方法時該對象是否爲空?返回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; 
} 

用法:

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

注意,許多類型的防範訪問名爲Dispose後的數據。 .Net中許多類使用的方法是在調用Dispose之後,所有調用都會失敗,並訪問ObjectDisposedException的對象狀態。

+0

謝謝,所以我甚至不關心在XmlReader和XmlTextReader(s)上調用.Close()?如果它在我的應用程序中被稱爲CON​​STANTLY,會不會最終導致內存泄漏? – ganders

+0

回答更新了使用情況。您可以在實現IDispsable的所有對象上調用Dispose(somtime asvalable as Close),但是當您完成它時,需要在適當的時候完成。即你不會用'XmlReader.Create()'來返回已經處理的對象,對嗎? –

+0

我不同意。尋找一個MSDN沒有這樣的異常「對象處置異常」由Close或Dispose來確定。所以這是不正確的。調用Close沒有任何副作用,然後Dispose – Darkonekt

相關問題