30

MVC に関するプロジェクトがあります。DB トランザクションには EF を選択しました。BLL レイヤー用のマネージャーをいくつか作成しました。using" " ステートメントが使用されている多くの例を見つけました。

public Item GetItem(long itemId)
    {
        using (var db = new MyEntities())
        {
            return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
        }
    }

ここでは、DBcontext の新しいインスタンスを作成しますMyEntities()「 IDisposable オブジェクトの正しい使用を保証する」ためusingに、「 」を使用しています。

それは私のマネージャーの唯一の方法です。しかし、私はそれらの10以上を持っています。マネージャーからメソッドを呼び出すたびに、" using" ステートメントを使用して、メモリ内に別の DBcontext を作成します。ガベージ コレクター (GC) はいつそれらを破棄しますか? 誰か知っていますか?

しかし、マネージャーのメソッドには別の使い方があります。グローバル変数を作成します。

private readonly MyEntities db = new MyEntities();

using" "ステートメントなしですべてのメソッドでDBcontextを使用します。メソッドは次のようになります。

public Item GetItem(long itemId)
{
    return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}

質問:

  1. DBcontext 変数を使用する適切な方法は何ですか?
  2. usage" " ステートメントを使用しないとしたら(パフォーマンスに影響するため)、GC がすべてを行うのでしょうか?

私は EF の使用の「新人」ですが、この質問に対する明確な答えをまだ見つけていません。

4

2 に答える 2