當執行using
關鍵字來實例化一個IO.StreamWriter
對象時,是否意味着在對象上調用了.close
或.dispose
?或者它是否重要,因爲一旦它達到最終使用它超出了範圍,並且無論如何都會收集垃圾?使用關鍵字:.Close或.Dispose
4
A
回答
6
using關鍵字將調用Dispose
。但是,通過公約,Dispose
和Close
應該始終執行完全相同的功能,並且可以互換。
這樣,任何資源即IDisposable
而且還提供了Close()
方法,如Stream
派生類,是細到using
塊內使用。
這在Framework Design Guidelines明確的問題:「你讓Close
執行相同Dispose
是很重要的」 ......
的MSDN help for IDisposable也表明這一點:「有這樣一個公約一類的實施者可能會選擇實現具有調用Dispose方法的定製名稱(如Close)的公共方法。「
或者是否重要,因爲一旦它達到使用它的目的是超出範圍,並且將垃圾收集呢?
它不會被垃圾收集 - 後不再在範圍,而不再引用任何對象,這將是資格進行垃圾回收。這意味着它將(至少在正確書寫的情況下),最終得到清理,但它可能不會發生很長一段時間 - 包括直到程序終止。使用塊會導致資源(而非內存)(例如流)立即關閉。
2
Using
只在範圍末尾調用Dispose
。但是,對於諸如StreamWriter
,Dispose
等類的內部結束呼叫Close
。
或者是否重要,因爲一旦它達到使用它的目的是超出範圍,並且將垃圾收集呢?
這是一種錯覺:全原因Using
塊和Dispose
方法是一個對象是在範圍的端立即收集不垃圾。
相關問題
- 1. 在InputStream上使用finally關鍵字#close()
- 2. 如何正確關閉ODP.net連接:dispose()或close()?
- 3. 應該IDataReader :: Dispose調用IDataReader :: Close?
- 4. 在MessageQueue上調用Close()或Dispose()什麼都不做
- 5. Dispose和Close有什麼區別?
- 6. 使用dispose()方法代替close()方法到表格
- 7. 在.Set之後直接調用.Close(.Dispose)EventWaitHandle是否安全?
- 8. 我是否需要調用.dispose()(javax.jcr.Binary)和.close()(java.io.InputStream)?
- 9. 使用「使用」關鍵字
- 10. 關鍵字'close'附近的語法不正確
- 11. VAR:A型或關鍵字
- 12. PHP - 和/或關鍵字
- 13. 經典ASP「或」關鍵字
- 14. GCC:和/或關鍵字
- 15. 具有Close()和Dispose()的Streamwriters有什麼意義?
- 16. 使用IN關鍵字
- 17. 使用JavaScript關鍵字
- 18. 使用新的關鍵字
- 19. 使用「新」關鍵字
- 20. Extern關鍵字的使用
- 21. 使用關鍵字這JS
- 22. C++關鍵字使用
- 23. 使用rownum與關鍵字
- 24. 使用關鍵字SqlDataAdapter
- 25. 如何使用關鍵字
- 26. 使用私人關鍵字
- 27. const關鍵字使用C++
- 28. 在where子句中使用Oracle保留字或關鍵字
- 29. 使用Dispose()方法
- 30. close()沒有正確關閉套接字