以下两种方法之间的连接关闭方式和时间有何不同?

时间:2012-10-11 00:58:57

标签: c# entity-framework using

下面是两种几乎完全相同的方法。我想知道上下文对象的处理方式和时间是否存在差异?

public List<Template> MethodVu()
{
  List<Template> templates;

  using (var context = new Entities())
  {
    templates = context.Templates.ToList();
  }

  return templates;
}

public List<Template> MethodDo()
{
  using (var context = new Entities())
  {
    return context.Templates.ToList();
  }
}

1 个答案:

答案 0 :(得分:2)

没有区别。在这两种情况下,离开context.Dispose()块时都会立即调用using。将结果存储在变量中然后返回它或者只返回它的事实没有区别(与dispose无关,但在这个具体的例子中我猜测编译器无论如何都会优化它)。

是什么让你问这个问题?


更多详细信息:using在以下意义上等同于try...finally

代码:

using (var context = new Entities())
  {
    return context.Templates.ToList();
  }

......完全等同于:

{
   var context = new Entities();
   try {
      return context.Templates.ToList();
   }
   finally {
      if (context != null) { context.Dispose(); }
   }
}

有关详情,请参阅the docs