【问题标题】:Use using to dispose resources使用 using 来处理资源
【发布时间】:2015-08-15 05:21:12
【问题描述】:

我刚刚开始使用“使用”来确保无论发生什么情况都可以处理资源。

下面是我为检索一些数据而编写的一些代码示例。我的问题是:

所有的“使用”都需要吗?还是只有第一个就足够了?

        SomeMethod()
        {
            using (SqlConnection cn = new SqlConnection("myConnection"))
            {
                cn.Open();

                using (SqlCommand cmd = cn.CreateCommand())
                {
                    cmd.CommandText = "myQuery";
                    using (SqlDataReader rdr = cmd.ExecuteReader())
                    {
                        if(rdr.HasRows)
                        {
                            while (rdr.Read())
                                // do something
                        }
                    }
                }
            }
        }

【问题讨论】:

标签: c# .net


【解决方案1】:

使用无非是:

SomeClass o = null;
try 
{ 
   // managed resource that you use
   o = new SomeClass();  
   // ... some other code  here
}
finally 
{
  if(o != null)
    o.Dispose();
}

在可能的情况下使用using 语句这一事实没有错(类实现IDisposable 接口)。当你想使用一些托管资源时,使用 using :)

【讨论】:

  • 你的例子中o的声明需要在try之前
【解决方案2】:

使用是以下模式的快捷方式:

IDisposable resource = .....;
try
{
}
finally
{
    if (resource != null)
        resource.Dispose();
}

我强烈建议在使用需要处置的资源或实现IDisposable 接口时始终使用using。原因是你不知道背后的实现,这样可以更安全地防止内存泄漏或其他代码问题。

【讨论】:

    【解决方案3】:

    所有的“使用”都需要吗?还是只有第一个就足够了?

    如果您使用的任何对象正在实现IDisposable,您可以使用using 语句,该语句将自动处理您的对象,或者您可以在不使用using 的情况下手动处理(关闭任何流等)您的对象,只需致电Dispose()

    因此,对于所有可以更好地处理的对象,请使用using 语句。

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 2011-07-26
      • 1970-01-01
      • 2014-08-09
      • 2023-02-07
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多