20

私は、使用AsNoTracking()時に一次キャッシュが無効になっていることを知っています。しかし、どのように使用AsNoTracking()するとパフォーマンスが向上するのでしょうか? それを使用する利点は何ですか?

4

1 に答える 1

43

AsNoTracking()エンティティが ObjectContext インスタンスによってローカルにキャッシュされないことを意味します。これにはいくつかの実用的な利点があります。

  1. メモリ使用量: ObjectContext は、返されたエンティティを参照していないため、エンティティを参照しなくなるとすぐに、ガベージ コレクターはエンティティを削除できます。通常、これが発生する前に ObjectContext を破棄する必要があります。

  2. パフォーマンス: EF は、データベースから返されたすべてのレコードを ID マップ内のローカル エンティティと照合する必要がないため、クエリの実行がわずかに速くなる可能性があります。

  3. Currency : クエリはデータベースの結果から直接実体化されたエンティティを返し、ローカル キャッシュに依存しないため、返されるエンティティは常にデータベースの最新の値を反映する必要があります。

  4. ステートレス: エンティティは ObjectContext によって追跡されないため、同じ ObjectContext インスタンスを読み取り専用クエリに無期限に使用し続けることができ、短命の ObjectContext を持つことに関する通常のアドバイスに制約される必要はありません。

AsNoTracking()エンティティのみをクエリする場合は、これをお勧めします。それらを更新する必要がある場合は機能しません。これはトレードオフです。

于 2013-01-25T20:20:51.287 に答える