黑马程序员技术交流社区
标题:
ado.net dispose和close的选择
[打印本页]
作者:
赵潮江
时间:
2012-4-7 16:46
标题:
ado.net dispose和close的选择
本帖最后由 赵潮江 于 2012-4-8 10:26 编辑
我在网上看到的这篇说的connection的close()和dispose()的区别
——网址http://apps.hi.baidu.com/share/detail/51527721
按照这篇说的意思是不是:使用dispose、就需要每天打开这个连接就需要create。
而如果使用close的话,这个连接会被放入连接池管理。
-------那是不是说一般情况下 都用close
作者:
赵潮江
时间:
2012-4-7 18:10
自己顶起来,有没有人帮忙解答下啊
作者:
郭耀强
时间:
2012-4-7 18:47
Close()方法只是关闭了连接,然后这个连接被存储到连接池,如果访问量大的话,超过了数据库连接池的链接数量,那么其他用户就没法链接数据库。
如果调用close()方法后,还可以用open()方法来直接重新打开之前的链接。,而调用Dispose()方法以后,这个连接就不能在使用了,也就是在数据库连接池销毁了。你在使用的时候必须重新实例化一个链接对象。
所以每次用完后最好能用dispose()释放一下。
或则你在程序中可以这样写
using (SqlConnection con = new SqlConnection(""))
{
using (SqlCommand cmd = new SqlCommand("", con))
{
}
}
这样在using句子完毕后,就自动释放SqlConnection和SqlCommand占用的资源了。这样说明白了吧
作者:
赵潮江
时间:
2012-4-7 19:01
还是不明白,连接池的作用是连接重用,都用dispose的话连接池不是变摆设了吗
作者:
张云静
时间:
2012-4-7 22:41
本帖最后由 张云静 于 2012-4-7 22:45 编辑
应该不是这个意思,你自己仔细阅读这篇文章。
SqlConnection类的Close()方法在MSDN中的说明是这样的:关闭与数据库的连接。
这是关闭任何打开连接的首选方法。如果SqlConnection超出范围,则不会将其关闭。因此,必须通过调用Close或Dispose显式关闭该连接。如果连接池值Pooling设置为true或yes,则基础连接将返回到连接池。另一方面,如果Pooling设置为false或no,则会关闭到服务器的基础连接。好象是Close()方法和Dispose()方法是类似的,
实际上只是在关闭连接这个功能上等效
。当Close()方法并没有调用GC.SuppressFinalize(this);,这导致的直接后果就是在垃圾回收的时候需要进行终止化操作,这会导致这个实例的“代龄”提升,
从而极大的延迟这个对象的回收时间!
所以是分情况的,
如果以后还需要使用这个连接可以使用Close()方法临时关闭连接,如果以后不需要使用这个连接了,可以优先录取Dispose()方法来释放资源,当然你可以使用using关键字来简化这个过程(因为using里面的object必须能被隐式的转变为IDisposable才行,所以当然只会调用Dispose()。)
作者:
赵潮江
时间:
2012-4-8 10:24
哦 大致懂了
作者:
pray
时间:
2014-4-26 04:18
LZ先生您好,您寄来的充气娃娃我们已经给您修好了,马上给您寄回去,但请您以后别那么残暴地对待她,她毕竟只是个娃娃,当她被寄来时,所有在场的工作人员都哭了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2