C#'使用'阻止循环内部

时间:2015-02-27 07:21:28

标签: c#

我想知道在C#中使用'using'块的最佳方法是哪种。

方法1:在'使用'块内循环

void MyMethod(List<Prod> productList)
{
    using(MyResource mr = new MyResource())
    {
        foreach(Prod product in productList)
        {
            //Do something with the resource
        }
    }
}

方法2:在'使用'区块之外循环

void MyMethod(List<Prod> productList)
{
    foreach(Prod product in productList)
    {
        using(MyResource mr = new MyResource())
        {
        //Do something with the resource
        }
    }
}

我想知道哪种方法更可取,为什么。这两者之间会有性能差异吗?如果资源是...说数据库连接或对象,它又如何不同?

谢谢!

3 个答案:

答案 0 :(得分:3)

在方法1中,您为循环创建一次资源。

在方法2中,您可以在产品列表中的每个产品上创建新资源。

除非有必要,否则不建议使用方法2。

方法1具有更好的性能,有发烧对象创建/销毁(以及消耗的内存)。特别是如果它是一个数据库,如果有一个池连接就会发生事件。

答案 1 :(得分:0)

此:

using(MyResource mr = new MyResource())
{
  //Do something with the resource
}

大致翻译为:

MyResource mr = new MyResource();
try {
  //Do something with the resource
} finally {
  mr.Dispose();
}

除了在第一个示例中的右大括号之后mr不可用。

如果您在两个示例中进行此替换,您将看到它们有多么不同。他们完成了不同的事情 - 在某些情况下都是有效的。

答案 2 :(得分:0)

它决定了该资源的范围。在外面,使用资源(变量)将被处置。

所以这取决于你的用法。通常&#34;使用&#34;用于创建和处理连接,以确保在所需操作后正确关闭。