什么是.NET非托管资源?

上一篇文章讲到托管代码与非托管代码,不禁想起.NET中还有一个托管资源与非托管资源。

关于非托管资源微软的官方文档是什么说的:

为非托管资源释放内存

对于应用程序创建的大多数对象,可以依赖垃圾回收器自动执行必要的内存管理任务。 但是,非托管资源需要显式清除。 最常用的非托管资源类型是包装操作系统资源的对象,例如,文件句柄、窗口句柄或网络连接。 虽然垃圾回收器可以跟踪封装非托管资源的托管对象的生存期,但却无法具体了解如何清理资源。 创建封装非托管资源的对象时,建议在公共 Dispose 方法中提供必要的代码以清理非托管资源。 通过提供 Dispose 方法,对象的用户可以在使用完对象后显式释放其内存。 使用封装非托管资源的对象时,应该了解 Dispose 并在必要时调用它。

 

有两种释放非托管资源的方式:

1. 使用try...catch...finally块,在finally中调用dispose方法(别忘了做非空判断..)

2. 使用using语句,它等价于try...finally

 

关于托管资源,在微软的文档上我并没有找到,在网上搜索了一下,托管资源指的是被CLR管理的资源,这个管理机制被称为GC,GC能够自动管理内存资源,再也不需要我们手动编写那部分代码了。通常,大部分引用类型都是托管资源。值类型不需要考虑GC回收的问题,因为它们会被自动释放。

 

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