2010-11-16 104 views

回答

3

那麼簡單的答案是他們實施'IDisposable',所以他們需要處置。

稍長的答案是它們消耗需要釋放的非託管資源。通過直接調用dispose(或使用'using'語句),您可以釋放這些資源,而不是等GC爲您完成。

+0

似乎我的問題是錯誤的。它應該是託管和非託管資源。這就是爲什麼我不能在谷歌找到它。 :) – Rye 2010-11-16 04:12:55

+0

是啊谷歌是真棒,除非你不能找出正確的關鍵字來觸發一些體面的結果。 – 2010-11-16 04:15:42

+0

感謝您的解釋。 – Rye 2010-11-16 04:18:22

3

這些對象是非託管資源(特別是GDI +對象)的包裝。如果這些對象沒有明確處理,那麼GC需要調用它們的終結器。這將延遲爲其他GC回收資源。*這意味着您的應用程序將使用更多的資源。

更新:澄清的措詞加上... *當GC遇到帶終結器的對象時 - 假定GC.SuppressFinalize()尚未在Dispose()方法中調用 - 它將終結器排隊以運行在未來某個時間在終結者線程上。對象所使用的內存和資源因此保持到至少在當前運行的GC之後。

+0

如果我沒有使用dipose方法怎麼辦?有沒有某種內存泄漏? – Rye 2010-11-16 04:00:49

+0

凱文你的答案似乎表示,如果你明確地處理對象,應用程序將使用比必要的更多的資源。那是你真正想說的嗎? – 2010-11-16 04:00:59

+0

@Rye。不,沒有內存泄漏。 GC將最終發佈非託管資源。直到fReachable處理完成纔會發生。這比對象的範圍長。 – 2010-11-16 04:02:25