托管资源和非托管资源
- 托管资源
- 由Clr跟踪和管理的内存资源,当我们创建一个对象时,Clr会为其分配一定数量的内存,并在对象不再需要时自动释放内存(由Clr负责管理的资源)
- 注意:
- 回收资源,不需要自己控制,当然对象只针对托管资源(部分引用类型),不回收非托管资源。当像数组,用户定义的类,接口委托,Object,字符串等引用类型时,栈上保存着一个地址而已,当栈释放后,即使对象没用了,但是堆上分配的内存还在,只能等Gc手动时才能真正释放
- 释放资源方式
- 非托管资源
- 由操作系统或其他外部资源管理的资源,例如文件句柄,数据库连接,网络连接等,这些资源通常需要手动释放,否则会占用系统资源并影响程序性能(由操作系统或其他外部资源管理器负责管理的资源)
- 对于非托管资源,Gc只能跟踪非托管资源的生存期,而不知道如何去释放它
- 释放资源方式
- 继承IDisposable接口
- Dispose(显式)(在其中释放托管资源和非托管资源,并将对象本身从垃圾回收期中移除,垃圾回收器不再回收此资源)
- 参数为True表示释放所有资源,只能由使用者调用
- 参数为false表示释放非托管资源,只能由垃圾回收器自动调用
- 如果子类有自己的非托管资源,可以重载这个函数,添加自己的非托管资源的释放
- 重载此函数必须保证调用基类的版本,以保证基类的资源正常释放
- 显式调用了dispose()方法,可以及时的释放资源,同时移除Finaliz()方法执行,提高性能

- 实现类的析构函数(在其中释放非托管资源)
- 只能由垃圾回收器调用

- Finalize(隐式)
- 用于基类不带close方法或者不带dispose显式方法的类,
- GC
- Clr为程度员提供的一种自动回收内存的管理机制(Gc回收)
- Gc作用:
- 当系统内部资源匮乏时,会自动取释放没有被使用的托管资源
posted @
2023-06-16 15:00
乐天--
阅读(
29)
评论()
收藏
举报