7

ここで、読み取り操作のためにデータをクエリするときに、に設定ObjectTrackingEnabledするとfalseパフォーマンスが多少向上することを読みました。私のクエリは次のようになります。

public return type TheQueryName (some parameters)
{
   using (TheDC MyDC = new TheDC())
   {
       var TheQuery = (...).ToList();

       return TheQuery;
   }
}

1)パフォーマンスの向上を追加したい場合は、行のObjectTrackingEnabled = true;直前に行を追加するだけですか?var TheQuery = (...).ToList();

2)また、クエリで設定ObjectTrackingEnabledtrueた場合、返す前に false に設定する必要がありますか、それともObjectTrackingEnabledデータ コンテキストの特定のインスタンスを設定するだけで、次の値の新しいデータ コンテキストをインスタンス化します?ObjectTrackingEnabled のデフォルト状態に戻ります。false

注:ObjectTrackingEnabled = false;読み取り操作への追加のみを計画しています。

ありがとう。

4

3 に答える 3

11

ObjectTrackingEnabled は、データ コンテキスト (TheDCあなたの場合) が読み込まれた後にエンティティへの変更を追跡するかどうかを制御します。それが必要かどうかは、特定のケースによって異なります。

当然のことながら、データ コンテキストが行うことを少なくすると、処理が速くなりますが、変更を追跡するという負担がかかります。変更追跡がクールな理由 次のことができるからです。

  1. いくつかのコンテキストからいくつかのエンティティをロードします
  2. それらを変更する
  3. 新しいものを追加、他を削除
  4. 変更されたエンティティの UPDATE クエリ、削除されたエンティティの DELETE などを実行するために、呼び出しSaveChangesてデータ コンテキストを把握させます。

変更追跡を無効にすると、変更内容、新しい値などをコンテキストに明示的に伝える必要があります。

それでもオブジェクト トラッキングが必要ないと仮定すると、特定のデータ コンテキスト インスタンスごとにプロパティが設定されます。これは、次のいずれかを行う必要があることを意味します。

  1. 作成するデータ コンテキストごとに手動で設定する
  2. 次のように、コンテキストのコンストラクターでコンテキストのデフォルトとして設定します。this.Configuration.AutoDetectChangesEnabled = true;詳細については、このブログ投稿を参照してください。

お役に立てれば!

于 2012-10-22T23:02:18.727 に答える
3

タグと件名には「Linq2SQL」と書かれていますが、質問はエンティティ フレームワークに関するものです。

「伝統的な」Linq2SQLの場合、代わりにこれが必要です:

 linq2SqlDBContext.ObjectTrackingEnabled = false;
于 2016-09-25T21:53:04.990 に答える