什麼是.NET非託管資源?

上一篇文章講到託管代碼與非託管代碼,不禁想起.NET中還有一個託管資源與非託管資源。

關於非託管資源微軟的官方文檔是什麼說的:

爲非託管資源釋放內存

對於應用程序創建的大多數對象,可以依賴垃圾回收器自動執行必要的內存管理任務。 但是,非託管資源需要顯式清除。 最常用的非託管資源類型是包裝操作系統資源的對象,例如,文件句柄、窗口句柄或網絡連接。 雖然垃圾回收器可以跟蹤封裝非託管資源的託管對象的生存期,但卻無法具體瞭解如何清理資源。 創建封裝非託管資源的對象時,建議在公共 Dispose 方法中提供必要的代碼以清理非託管資源。 通過提供 Dispose 方法,對象的用戶可以在使用完對象後顯式釋放其內存。 使用封裝非託管資源的對象時,應該瞭解 Dispose 並在必要時調用它。

 

有兩種釋放非託管資源的方式:

1. 使用try...catch...finally塊,在finally中調用dispose方法(別忘了做非空判斷..)

2. 使用using語句,它等價於try...finally

 

關於託管資源,在微軟的文檔上我並沒有找到,在網上搜索了一下,託管資源指的是被CLR管理的資源,這個管理機制被稱爲GC,GC能夠自動管理內存資源,再也不需要我們手動編寫那部分代碼了。通常,大部分引用類型都是託管資源。值類型不需要考慮GC回收的問題,因爲它們會被自動釋放。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章