C# 中的 using 关键字,正确使用方法

5

以下选项中哪一个更好?

只使用一个 using 语句是否足够?

选项1:

using(SqlConnection con = new SqlConnection(constring))
{
   using(SqlCommand cmd = new SqlCommand())
   {
       .........................
       .........................
       .........................
   }
}

选项2:
using(SqlConnection con = new SqlConnection(constring))
{
   SqlCommand cmd = new SqlCommand();
   .........................
   .........................
   .........................
}

5个回答

15

通常最简单的做法是遵循这个规则:"如果类型实现了IDisposable,那么就使用using结构。"所以我会选择某种形式的选项1。


9
您需要将它们都包装起来,尽管如果这让您感到不舒服,您可以使其看起来更加整洁!
using (var conn = new SqlConnection(/* ... */))
using (var cmd = new SqlCommand(/* ... */))
{
    // ...
}

2

第一个选项肯定更好。

即使连接和命令之间存在关系,使外部连接足够使用,您也不希望依赖于此,或者期望读者知道。

这种关系通常没有记录,并且可能会在未来的版本中更改。


你能澄清一下 即使 Connection 和 Command 之间存在关联 吗?谢谢。 - Mubarek
该命令需要连接,当您关闭连接时,您不会保留服务器上的资源。尽管连接池可能会使问题变得不那么明显。另请参阅TextReader和Stream。 - H H

1

不够,通常情况下,每次实例化IDisposable时都应该使用using块进行封装。


1

当你有多个时,最好使用两个using命令(尽管有替代语法)。明确表达你想要访问这些资源的时间对于垃圾回收来说更好。


你为什么认为 IDisposableusing(...) 与垃圾回收有任何关系? - asawyer
2
在这两种情况下,我们都需要处理清除内存。 - Mubarek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接