关于使用using

bios8086 2010-06-16 08:48:07
using (StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("GB2312")))
{

}
请问使用using 清除 reader这个对象 和

reader.Close();

有区别吗?
...全文
231 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joe-xXx 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]

using语句,定义一个范围,在范围结束时处理对象。
当在某个代码段中使用了类的实例,只要离开了这个代码段就自动调用这个类实例的Dispose。
[/Quote]

用了using就可以代替 try..catch..finally,代码优雅
mickle2010 2010-06-17
  • 打赏
  • 举报
回复
顶一下
q287541917 2010-06-17
  • 打赏
  • 举报
回复
在学习中
倒霉熊 2010-06-17
  • 打赏
  • 举报
回复
学习 回复内容太短了!
小范f-li.cn 2010-06-17
  • 打赏
  • 举报
回复
upup
mayag 2010-06-17
  • 打赏
  • 举报
回复
学习中
zhsleep 2010-06-17
  • 打赏
  • 举报
回复
学习了。。
xk1126 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
using语句,定义一个范围,在范围结束时处理对象。
当在某个代码段中使用了类的实例,只要离开了这个代码段就自动调用这个类实例的Dispose。
[/Quote]
uppp
mars199 2010-06-16
  • 打赏
  • 举报
回复
学到了
yulinxinchu 2010-06-16
  • 打赏
  • 举报
回复
学习中
chw053167 2010-06-16
  • 打赏
  • 举报
回复
微软ADO.NET Team经理说SqlConnection的Close和Dispose实际是做的同一件事,唯一的区别是Dispose方法会清空ConnectionString,即设置其为null。
beifengchuiqi 2010-06-16
  • 打赏
  • 举报
回复
用using 清除 reader这个对象 ??
怎么清除?
xiaoxiaoman32 2010-06-16
  • 打赏
  • 举报
回复
sgdasgda
兔子-顾问 2010-06-16
  • 打赏
  • 举报
回复
using最终是调用dispose,实现IDispose接口的类,在Dispose方法中,大多是在调用Close方法。直接调用Close和using的效果一样,但Using会早一点调用Dispose,执行的函数调用上,都是一样次数的,因为实现IDispose接口的,在垃圾回收的1带回收时,都会调用Dispose方法。用Using是个好习惯。但如果同时要释放的多,还是不要这样写了。看情况把。
qq234121906 2010-06-16
  • 打赏
  • 举报
回复
微软ADO.NET Team经理说SqlConnection的Close和Dispose实际是做的同一件事,唯一的区别是Dispose方法会清空ConnectionString,即设置其为null。

学习了。
江南小鱼 2010-06-16
  • 打赏
  • 举报
回复
Close and Dispose are basically the same thing on an ADO.NET connection object for providers shipped by Microsoft,and topically for 3rd party providers as well(haven't seen one that does it differently,but you never konw:).The only difference is that Dispose alse clears the connection string.Calling only one of them is enough-whichever you prefer or applies more to your scenario(e.g.C# "using" statement calls Dispose).

-

Pablo Castro

Program Manager-ADO.NET Team

Microsoft Corp.

微软ADO.NET Team经理说SqlConnection的Close和Dispose实际是做的同一件事,唯一的区别是Dispose方法会清空ConnectionString,即设置其为null。
江南小鱼 2010-06-16
  • 打赏
  • 举报
回复

Close and Dispose are basically the same thing on an ADO.NET connection object for providers shipped by Microsoft,and topically for 3rd party providers as well(haven't seen one that does it differently,but you never konw:).The only difference is that Dispose alse clears the connection string.Calling only one of them is enough-whichever you prefer or applies more to your scenario(e.g.C# "using" statement calls Dispose).

-

Pablo Castro

Program Manager-ADO.NET Team

Microsoft Corp.

微软ADO.NET Team经理说SqlConnection的Close和Dispose实际是做的同一件事,唯一的区别是Dispose方法会清空ConnectionString,即设置其为null。


SqlConnection conn = new SqlConnection("server=localhost;database=northwind;uid=sa;pwd=sa");

conn.Open();

conn.Close();

conn.Open();

conn.Dispose();

conn.Open();

运行上例发现Close掉的 SqlConnection仍然可以Open,Dispose后的却不可以Open,这是因为调用Dispose之后清空了ConnectionString。如果Dispose后给ConnectionString重新赋值,则不会报错。

Close会将连接归还给连接池,不是归还SqlConnection对象,而是归还SqlConnection.Open()时引用的DbConnectionInternal对象,DbConnectionInternal对象在连接池暂存;而Dispose方法是标记GC可回收的对象,但不是马上回收。


try…catch…finally pattern可以让程序员自订错误异常信息,using block则不行,using block的特性是自动调用Dispose方法,不用手动调用Close方法,性能上基本无差别。

Dispose会执行Close方法。

protected override void Dispose(bool disposing)

{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);

}
using block要求对象必须实现IDisposable接口,因为using block会自动调用Dispose方法。

class MyCls : IDisposable

{

public MyCls()

{ }

public void Dispose()

{

Console.WriteLine("Disposed");

}

}

class Program

{

static void Main(string[] args)

{

//使用using会自动调用Dispose()方法,using语句括号中的类必须实现IDisposable接口。

using (MyCls cls = new MyCls())

{

Console.WriteLine("Quit");

}

MyCls cls1=null;

//等价于

try

{

cls1= new MyCls();

}

catch (Exception ex)

{

throw new InvalidOperationException(ex.Message);

}

finally

{

cls1.Dispose();

}

Console.ReadLine();

}

}

xiaoxiaoman29 2010-06-16
  • 打赏
  • 举报
回复
gdgdgdg
xiaoxiaoman28 2010-06-16
  • 打赏
  • 举报
回复
gx
gx
gx
zhu_chuan_hang 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
using语句,定义一个范围,在范围结束时处理对象。
当在某个代码段中使用了类的实例,只要离开了这个代码段就自动调用这个类实例的Dispose。
[/Quote]
也许是吧
加载更多回复(1)

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧