1、托管资源:很多程序创建的对象,可以通过GC回收机制进行回收的资源称为托管资源,由CRL自动调用垃圾回收,通过GC自动回收释放。
2、非托管资源:很多是操作系统资源的对象,如文件句柄,数据库连接等。.net 提供Object.Finalize()方法,让GC回收,不过Finalize方法不执行任何操作,所以必须要重写此方法,而实际编程中无法覆盖实现此方法,只能通过析构函数自动生成Finalize方法,来实现资源的回收。
这些非托管资源的释放,需要继承IDispoable,手动调用Dispose及时回收 或者等系统调用析构进而调用Dispose释放资源。
3、避免非托管资源没有释放:
1、try catch finally 在finally中释放
2、使用using语句,限定非托管资源的生命周期范围,进而系统释放资源