C#资源释放方法实例分析

2019-12-26 18:07:38于丽
易采站长站为您分析C#资源释放方法,结合实例详细分析了C#资源释放的具体方法与相关技巧,需要的朋友可以参考下  

本文实例讲述了C#资源释放方法。,具体如下:

1、try{}finally{}

2、using

只有类型实现了IDisposable接口并且重写Dispose()方法可以使用using语句实现资源释放.

首先来看MSDN中关于这个接口的说明:


[ComVisible(true)]
public interface IDisposable
{ // Methods
void Dispose();
}

1.[ComVisible(true)]:

指示该托管类型对 COM 是可见的.

2.此接口的主要用途是释放非托管资源。

当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。但无法预测进行垃圾回收的时间。另外,垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。将此接口的Dispose方法与垃圾回收器一起使用来显式释放非托管资源。当不再需要对象时,对象的使用者可以调用此方法。

一、基本应用

1.我们来定义一个实现了IDisposable接口的类,代码如下:


public class TestClass :IDisposable
{
  public void DoSomething()
  {
    Console.WriteLine("Do some thing....");
  }
  public void Dispose()
  {
    Console.WriteLine("及时释放资源");
  }
}

2.我们有两种方式来调用:

2.1.第一种方式,使用Using语句会自动调用Dispose方法,代码如下:


using (TestClass testClass = new TestClass())
{
  testClass.DoSomething();
}

2.2第二种方式,现实调用该接口的Dispose方法,代码如下:


TestClass testClass = new TestClass();
try {
  testClass.DoSomething();
}
finally
{
  IDisposable disposable = testClass as IDisposable;
  if (disposable != null)
  disposable.Dispose();
}

两种方式的执行结果是一样的。

2.3.使用try/catch/finally的好处是,捕获异常后可以进行处理与此同时也可以释放资源;但是使用using,有异常也可以释放资源,只是无法对异常进行处理,直接将异常放行,而已实际上这两种方法对资源的释放上是一样的.