using 如此用法有什么好处

zhengyingcan 2009-04-19 12:12:21
using (sqldatareader rdr = cmd.executereader())
{
while (rdr.read())
console.writeline("{0,-32} {1} {2:c}"
rdr.getstring(0),rdr.getint16(1),
rdr.getdecimal(2));
rdr.close();
}
我不知道用这个using有什么特别的作用,我去掉using 的用法,也可以用,不知道用这个到底有什么优势,请高人们指点指点,非常感谢.
...全文
418 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
传说中的张 2010-05-19
  • 打赏
  • 举报
回复
mark
热学沸腾56 2009-04-19
  • 打赏
  • 举报
回复
学习了.......
  • 打赏
  • 举报
回复
在C#中打开数据库连接,对了学这方面的学者来说是一件在简单不过的事情了,但是我看到的是在打开数据库的连接方式中,有的不是放在前面打开,那就是放在最后面来打开连接。解释说:是为了让代码执行好了,在来打开连接等等之内的说都有。谈到这里我想说的是,这个打开方式无论你放在哪里,它肯定先去重试看检查是否连接开启的,是开启的话将会执行下面的操作,反之将抛出错误异常、并告提示你的连接未开启。好了,闲话将到这里,我们来看看最佳的连接方式如下的代码:

using (SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlconn"].ToString()))
{
using (SqlCommand sqlcmd = new SqlCommand())
{
//等待请求打开连接
sqlcmd.Connection.Open();

//执行SQL语句
sqlcmd.CommandText = "insert into Example values('aa','bb')";
sqlcmd.Connection = sqlconn;

//返回影响的行数
sqlcmd.ExecuteNonQuery();
}
}
注意:DataAdapter中的用法和Command中的用法有所不同的,DataAdapter中有SelectCommand、UpdateCommand、DeleteCommand、InsertCommand 等等这些属性,而Command中没有,所以DataAdapter中要和那些属性一起结合着用。(实例参考下DataSeT)

看到上面的的实例了;我们就来杂谈下他为什么为最佳的打开连接呢?
1,你们想想看看,我们的计算机要通讯,两台计算机必修进行TCP/IP的三次握手才能让两台机子通讯。可想而之,C#要和数据库之间进行数据传替,当然也要进行数据互通才行。所以说你的打开连接无论放在哪里打开,它将会先来检测是否为连接良好才行。
2,我们直接的打开数据库连接 和 等待执行数据请求打开连接相比,大家应该知道那种打开要好些了吧。很明显的在using析构的使用下,也可以很好的优化数据的传输,在也不会象直接打开那样,没有数据的时候也去连接数据,从而占用我们的资源。
3,如果你认为是放在后面打开可以优化性能的话,我建议你用汇编工具(OD)对他进行反汇编(OD中的trace数据捕捉)数据捕捉,看看是否如此所说。我也是闲得没事中发现的.(呵呵!)
ginni215 2009-04-19
  • 打赏
  • 举报
回复
在using代码块中分配的资源,在出了using代码块后就会释放,主要就起到了自动资源释放的作用~
诸葛非卿 2009-04-19
  • 打赏
  • 举报
回复
原来有这个妙用啊,能不能给具体讲讲啊!
zhengyingcan 2009-04-19
  • 打赏
  • 举报
回复
哦,原来如此,using 用{} 起来的地方都可以起到快速释放内存吗
  • 打赏
  • 举报
回复
快速释放内存
itliyi 2009-04-19
  • 打赏
  • 举报
回复
自动释放资源
蓝海D鱼 2009-04-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kkun_3yue3 的回复:]
自动释放资源[实现了IDisposable接口的实例]
[/Quote]

fa_7672775 2009-04-19
  • 打赏
  • 举报
回复
up
freewind0521 2009-04-19
  • 打赏
  • 举报
回复
使用using时可以自动释放资源,不用手动去释放就想LZ这种情况,其实可以不用rdr.close(); 这一句的,
但是using有个问题就是当出现异常的时候不能关闭rdr,所以最好还是在using中加上try{}catch{}
beckfun 2009-04-19
  • 打赏
  • 举报
回复
好象是能减少CPU资源的占用率和自动关闭和释放资源,不知道这样的回答会不会误人子弟!
kkun_3yue3 2009-04-19
  • 打赏
  • 举报
回复
自动释放资源[实现了IDisposable接口的实例]
烈火蜓蜻 2009-04-19
  • 打赏
  • 举报
回复
退出语句块时,资源肯定能被释放,不管离开using块是因为异常还是返回
pltj2008 2009-04-19
  • 打赏
  • 举报
回复
USING 有两种作用 第一是 作为 指令 是用于引用命名空间的
另一个就是作为语句了 定义了一个范围,在此范围末尾自动释放对象
楼主的属于后者

110,545

社区成员

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

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

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