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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈育梅 高级黑马   /  2012-10-31 21:06  /  2994 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么情况下使用close(),什么情况下使用dispose()?

评分

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

查看全部评分

3 个回复

倒序浏览
其实这个知识点我也不太清楚,我自己习惯使用using。而查询资料后得出,close和dispose还是有区别的, 不过区别并不大。大部分情况,使用close和dispose都是可以的。
资料博文:http://www.189works.com/article-58655-1.html
引用微软ADO.Team的经理的话说,sqlconnection的close和dispose实际是做的同一件事,唯一的区别是Dispose方法清空了connectionString,即设置为了null.
比如SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=northwind;User ID=sa;Password=steveg");        
con.Open();  
con.Close();         
con.Open();      
con.Dispose();   
con.Open();
上例运行发现,close掉的connection可以重新open,dispose的不行,因为connectionstring清空了,会抛出异常,但请注意此时sqlconnection对象还在。
根据翻译,可以这么简单理解:close是关闭对象,Dispose是销毁对象,垃圾回收机制。
而其实dispose也做了close的工作。Dispose会自动检查是否调用了close,如果close了,就直接Dispose,如果没有close,就先调用close再Dispose。
习惯性的做法是,使用using程序块,在离开using程序块的时候,CLR会自动调用类型所创建对象的Dipose方法。

评分

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

查看全部评分

回复 使用道具 举报
close()后,可以在接下来的操作中直接Open()来继续直接向数据库发送命令,无需进行繁琐的的连接操作。
dispose()会释放连接,必须重新connection。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
欧玉斌 发表于 2012-10-31 21:40
其实这个知识点我也不太清楚,我自己习惯使用using。而查询资料后得出,close和dispose还是有区别的, 不过 ...

记住这一点就可以:close是关闭对象,Dispose是关闭并且销毁对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马