0

以下は、ほぼ同じ 2 つの方法です。コンテキストオブジェクトが破棄される方法または時期に違いがあるかどうかを知りたいですか?

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();
  }
}
4

1 に答える 1

2

変わりはない。どちらの場合も、ブロックcontext.Dispose()を離れるとすぐに呼び出されます。using結果を変数に格納してから返すか、単に返すだけで違いはありません (破棄とは関係ありませんが、この特定の例では、コンパイラーがとにかくそれを最適化すると推測しています)。

その質問をする理由は何ですか?


詳細:は、次の意味でusinga と同等です。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(); }
   }
}

詳細については、ドキュメントを参照してください。

于 2012-10-11T01:06:55.510 に答える