A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵潮江 中级黑马   /  2012-4-7 16:46  /  2362 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵潮江 于 2012-4-8 10:26 编辑

我在网上看到的这篇说的connection的close()和dispose()的区别  
——网址http://apps.hi.baidu.com/share/detail/51527721
按照这篇说的意思是不是:使用dispose、就需要每天打开这个连接就需要create。
而如果使用close的话,这个连接会被放入连接池管理。
      -------那是不是说一般情况下 都用close

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

6 个回复

倒序浏览
自己顶起来,有没有人帮忙解答下啊
回复 使用道具 举报
Close()方法只是关闭了连接,然后这个连接被存储到连接池,如果访问量大的话,超过了数据库连接池的链接数量,那么其他用户就没法链接数据库。
如果调用close()方法后,还可以用open()方法来直接重新打开之前的链接。,而调用Dispose()方法以后,这个连接就不能在使用了,也就是在数据库连接池销毁了。你在使用的时候必须重新实例化一个链接对象。
所以每次用完后最好能用dispose()释放一下。
或则你在程序中可以这样写
using (SqlConnection con = new SqlConnection(""))
            {
                using (SqlCommand cmd = new SqlCommand("", con))
                {

                }
            }
这样在using句子完毕后,就自动释放SqlConnection和SqlCommand占用的资源了。这样说明白了吧

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
还是不明白,连接池的作用是连接重用,都用dispose的话连接池不是变摆设了吗

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张云静 于 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()。)

评分

参与人数 2技术分 +2 黑马币 +9 收起 理由
郑文 + 2
赵潮江 + 9

查看全部评分

回复 使用道具 举报
哦 大致懂了
回复 使用道具 举报
pray 高级黑马 2014-4-26 04:18:22
7#
LZ先生您好,您寄来的充气娃娃我们已经给您修好了,马上给您寄回去,但请您以后别那么残暴地对待她,她毕竟只是个娃娃,当她被寄来时,所有在场的工作人员都哭了  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马