.NET对象的释放

最近在编写代码时应用到了using语句,它能够自动释放语句块内的资源,同样在vb.NET中还提供了多种方法释放资源,接下来对它们进行下总结。

.NET提供了垃圾回收器(Garbage Collector)来自行毁灭物件,它自动释放用来存储不在需要的对象的内存,但内存的释放具有不确定性,而且在不定的时间执行,一旦通用语言运行库(CLR)决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如文件句柄和网络连接这样的有限资源,以减少运行内存。

Dispose方法

在.NET中我们无法选择毁灭物件,但是可以释放器所使用的资源。Dispose()方法提供了对资源的释放,调用该方法可以将制定的对象资源释放。

在对象的释放中有时还涉及到Close()方法,该方法能够关闭所使用的对象,它和Dispose()方法的区别在于一个关闭,一个释放。

如:


Sqlconnection conn=new SqlConnection(“DataSource=LocalHost; Initial Catalog=DataBaseName; UserId=UserName; Password=12345”);
Conn.open();
Conn.close();
Conn.Dispose();

上例中Close只是将数据库链接进行关闭,关闭之后可以重新Open。

Dispose不仅将数据库链接关闭而且将该链接进行清空,清空之后不能重新Open,若想重新Open必须重新赋值。

但是两者并不能销毁SqlConnection对象,即不能释放链接对象在数据库中所占用的资源,而是在某一时间由垃圾回收器自动销毁,回收。

同样Close方法还可以应用在窗体对象的关闭中,如:form1.close()。

using语句

Using语句允许程序员指定使用资源的对象应当合适释放资源。为using语句提供的对象必须实现IDisposable接口。此接口提供了Dispose方法,该方法将释放此对象的资源。


using   (SqlConnection   conn   =   new   SqlConnection("connection   string"))   
{   
   .....   
}   

在退出{...}代码块后,会自动调用conn的dispose方法,而conn的dispose方法会调用close方法当然using()括起来的类必须实现IDisposable接口

相当于:

SqlConnection   conn   =   new   SqlConnection("connection   string"); 
  
try   
{   
  conn.Open();   
   .....   
}   
catch(...)   
{   
   ....   
}   
finally   
{   
   conn.Close();   
}

有很多时候不知道在何时释放资源适合,用using语句可以等程序执行完自动释放资源。









          
展开阅读全文

没有更多推荐了,返回首页