c#--资源释放--析构


有些对象,如connection、DataReader、DataSet等等,最后用完了后是用close()合适还是用dispose()?或者两个都要加上?还是最后都只用dispose()就可以?
我想知道的是怎么样才最少占用资源、程序性能最高?希望给出有力的答案,最好有参考,谢谢

DataReader,DataSet在使用完后,Close.
connection一般是写在using里的,例如:
using(SqlConnection sqlConn=......)
{
//连接数据库
//对数据库操作,其间可能会用到DataReader,DataSet
//....
//关闭DataReader,DataSet
sqlConn.Close();
}

这样,sqlConn会在花括号结束时被自动Dispose,及时回收.

以connection来说,close是关闭连接,但是它是链接对象仍然存在,下一次需要该链接,只需要调整用open方法就行,而dispose()则是析构链接对象,当你需要链接时,需要重新实例化connection对象,和open()链接。
一般使用会用close(),
dispose()会释放内存,我一般不用这个,因为C#的垃圾回收就自动帮我们搞定,函数的作用域完成,就会自动析构,不用我们显式地析构,除非你的程序对内存空间有苛刻的要求 





posted on 2012-04-11 20:16 青蛙學堂 阅读(1011) 评论(2)  编辑 收藏 引用 所属分类: Vs2008

评论

# re: c#--资源释放--析构 2012-04-11 20:17 ddddd

Close 是停业整顿,停业了,可以通过公关,再重开,物还是原来的物;只是关闭而已,没有释放真正的释放资源,可以重新打开;
Dispose 是炸毁,炸毁了,想再开张,就只有重头建起;是把对象销毁,将不再存在;

  回复  更多评论   

# re: c#--资源释放--析构 2012-04-11 20:20 ddddd

大多数情况直接使用Close方法就可以释放窗体了,但是在以下两种情况下调用 Close 不会释放窗体:

(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;

(2) 您是使用ShowDialog显示的该窗体。

在这些情况下,需要手动调用Dispose来将窗体的所有控件都标记为需要进行垃圾回收。

你可以这样理解

Close()是关闭这个窗口并释放资源 如果关闭的是主窗口同时还会退出程序

dispose()是释放资源但这并不意味着退出程序 它只在窗体被最小化或透明度为100 或缩到托盘里时才用到

CLOSE更彻底的让一个窗口消失掉 他不再占用内存和显存(也就是没有界面被绘制)

  回复  更多评论   

只有注册用户登录后才能发表评论。
<2020年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜