最近在编写代码时应用到了using语句,它能够自动释放语句块内的资源,同样在vb.NET中还提供了多种方法释放资源,接下来对它们进行下总结。
.NET提供了垃圾回收器(Garbage Collector)来自行毁灭物件,它自动释放用来存储不在需要的对象的内存,但内存的释放具有不确定性,而且在不定的时间执行,一旦通用语言运行库(CLR)决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如文件句柄和网络连接这样的有限资源,以减少运行内存。
在.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语句提供的对象必须实现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语句可以等程序执行完自动释放资源。