2012-03-19 4 views
1

EFを使用してデータベースからオブジェクトを取得しています。私は2つの異なる反復でこれらのオブジェクトが必要です。最初の反復では、私はそれらをデータベースから取得します。 2番目のオブジェクトでは、再びオブジェクトを使用する必要があります。EFを使用してオブジェクトを取得して作成した後、そのオブジェクトをメモリに保存する必要がありますか?

オブジェクトをリストに保存してデータベースから再度取得するのではなく、最近使用されたためにEFがメモリに保存すると、2回目の反復処理が高速になりますか?

+0

が良いでしょうに変更する、特に持たないオブジェクトのキャッシュ・アプローチを使用するようにしてください。オブジェクトをリストに保存するとどういう意味ですか? –

+0

はい、私はここでも問題を見ることはできません。答えは、実際にはかなり明白なようです。しかし、あなたはEFがあなたに提供するさまざまな可能性をすべて求めているかもしれません。 – squelos

答えて

0

まあメモリにロードされますので、使用することができますか?軽量なオブジェクトへの参照のみを保存しています。

1

彼らはLocalプロパティを使用してアクセスできるようになりますように、あなたは、このようにメモリ内のオブジェクトをLoad必要があります。

context.YourTable.Load(); 

をして、あなたが望むように何度も反復するLocalプロパティを使用する必要があります。

foreach(var obj in context.YourTable.Local) { 
//// 
} 

またToList()は、あなたがそれらをした直後、なぜ単にメモリに保管してください必要がある場合は、あなたのアイテムが

1

追跡を無効にしない限り、EFはDbContextオブジェクトの存続期間中オブジェクトをメモリ内で照会したままにします。

オブジェクトを更新したくない場合は、DBcontextに保存せずにメモリに保存しておくことをお勧めします。これにより、パフォーマンスが向上します。クエリに.AsNoTracking()を追加すると、これを行うことができます。

コンテキストのライフサイクルを超えてオブジェクトを永続化する場合は、メモリにキャッシュすることでオブジェクトを永続化できます。あとで再接続して更新を行うことができます

1

もちろん、メモリからの取得は高速です。ところで、メモリからオブジェクトを取得する場合は、リストに格納する必要はありません。LocalのEF機能の1つを使用してください。

0

は、最初の反復と2回目の間の差をクリアしていない、例を提供するために、しばしば

関連する問題