它從我開始讀一stackoverflow answer爲什麼我需要在stringreader和stringwriter上調用dispose?
StringWriter
implments上MSDNpublic abstract class TextWriter : MarshalByRefObject, IDisposable
它說:
該框架提供了應 實施提供開發人員手動System.IDisposable接口一旦不需要,可以立即釋放非託管 資源。
但是什麼被視爲非託管資源?我顯然不認爲StringWriter
符合資格。如果我寫我自己沒有繼承IDisposable的....我看不出有任何需要補充Dispose()
class ConfusedDevStringWriter{
private StringBuilder sb;
public ConfusedDevStringWriter(){ //ctor
sb = new StringBuilder();
}
}
事實上我與Visual Studio調試器的內存測試: 一次函數返回時,StringWriter
其StringBuilder
被釋放...... Moreoever,調用Dispose似乎爲StringWriter的什麼也不做......
所以不是每一個說和poorly類從IDisposable
rit有用Dispose
。這又回到我的問題什麼被視爲非託管資源(例子將非常感謝n_n)。我聽說文件是其中的一個......但不是CLR的虛擬機?......每個資源都應該由它來管理,不是?從抽象TextWriter
,它實現IDisposable
,並具有一定的子類做有像流,文件句柄等,所以可以安全地處理TextWriter
任何子類的非託管資源,而無需擔心
你的問題「*什麼被視爲非託管資源*」已經有了答案:http://stackoverflow.com/questions/3433197/what-exactly-are-unmanaged-resources – user3185569
問題在標題中回答或多或少HTTP ://Stackoverflow.com/questions/234059/is-a-memory-leak-created-if-a-memorystream-in-net-is-not-closed(關於MemoryStream的Q也一樣)。 –
我把它作爲http://stackoverflow.com/questions/2475228的一個副本關閉,它和http://stackoverflow.com/questions/3433197可以解答這兩個問題。 –