托管资源 :值类型 引用类型
非托管资源eg 文件流 数据库连接 socket
值类型存在堆栈中
引用类型(string Array delegate)实例存在托管堆中,托管堆由垃圾收集器GC自动回收
封装了非托管资源的类型需要在回收内存前释放非托管资源
1. 终结器Finalize(C#中对应析构函数,实际上是clr根据析构函数再生成finalize函数),由GC自动调用;
实现:
{
Dispose(false);
}
2. Dispose() 需在程序中显式调用
实现:
{
GC.SuppressFinalize(this); 手动释放后,指明无需GC调用Finalize()再次释放
}
3. Close()
在语义上它和Dispose很类似,按照MSDN的说法,提供这个函数是为了让用户感觉舒服一点,因为对于某些对象,例如文件,用户更加习惯调用Close()。
其中Dispose(bool) 参数为true时,回收托管资源和非托管资源
参数为false时,只回收非托管资源
Using 语句
定义一个范围,将在此范围之外释放一个或多个对象。末尾调用Dispose方法释放资源
为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。