Close()和Dispose()

 .net中的许多类都提供了Close()Dispose()方法,但是这两个方法有什么却别呢?

看下边的例子

  SqlConnection conn = new SqlConnection("连接字符串"); 

  conn.Open();

  conn.Close();//先关闭

 Console.WriteLine(conn.State);//连接状态:关闭

  Console.WriteLine(conn.ConnectionString);//此时连接字符串还在

 conn.Open();//再打开。正常 

 conn.Dispose();//先释放

 Console.WriteLine(conn.State);//连接状态:关闭

 Console.WriteLine(conn.ConnectionString);//连接字符串已经置为空:Empty.String

 conn.Open();//再打开。抛异常 

结果如下:

1、两者都关闭了数据库连接

2Close后数据库连接可以再次打开;而Dispose后连接字符串被清空,连接不能再打开。

如此看来,CloseDispose不完全是一回事。现在似乎可以理解为,Close不负责销毁对象,仅仅是根据类的功能,实现业务上的一个“关闭”,在本例,仅仅是改变了一下连接状态(从连接→关闭);而Dispose,则是销毁对象并释放资源。换言之,Close只与业务有关,Dispose只与对象有关。所以被Close的对象可以再次使用,而Dispose则彻底销毁。

 注:原则上能 Dispose 的类就要Dispose ,类似FileStream 的对象如果不在后面的代码中使用,不用 close 直接Dispose 即可,Dispose其实隐含了close 的。

数据连接对象推荐使用 using 代码块自动释放以防止中途出现异常,.net 不要把对象 = null; 在一般情况下.net的一个变量如 FileStreamfs = new FileStream(@"C:\test.txt", FileMode.OpenOrCreate);这个只是一个地址而已,= null 是没啥用的。如果等于null 反倒影响GC回收了。 

结论:

1Close负责关闭业务,Dispose负责销毁对象。Dispose会负责Close的一切事务,额外还有销毁对象的工作,即Dispose包含Close

2、当有明确需求的时候,不要混用二者

3、两者连在一起用没什么意义。要么关闭以便再次使用,要么销毁不再使用。 

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海拾贝2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值