httpcontext キャッシングと Enterprise Library Caching Application Block のどちらを使用すべきかわかりません。また、キャッシュされたリストの一部であるエンティティを削除または更新するときのキャッシュ戦略の最適なパターンは何ですか?
キャッシュからすべてのリストを削除するか、キャッシュされたリストから項目のみを削除する必要がありますか? 更新すると、キャッシュからリストを削除するか、その中のエンティティを更新します。
httpcontext キャッシングと Enterprise Library Caching Application Block のどちらを使用すべきかわかりません。また、キャッシュされたリストの一部であるエンティティを削除または更新するときのキャッシュ戦略の最適なパターンは何ですか?
キャッシュからすべてのリストを削除するか、キャッシュされたリストから項目のみを削除する必要がありますか? 更新すると、キャッシュからリストを削除するか、その中のエンティティを更新します。
両方でいくつかのテストを行った後、コードのコンテキストでキャッシュ アプリケーション ブロックの完全なレビューを行い、その経験をブログに書きました。使い方は非常に簡単で、私たちのニーズを満たすのに十分強力です。私はそれをお勧めします、私の結果はここにブログに書かれました.
あなたの立場では、リポジトリ パターンを使用してキャッシュを維持します。これはデータベース データセットに対して適切に機能し、独自のキャッシュに対しても同様に機能するはずです。リポジトリ パターンに慣れていない場合は、Steven Walther によるこの投稿を確認してください。. ただし、変更に必要なアイテムのみを取り出し、残りはそのままにしておくという、前の回答には反対する傾向があります。これにより、必要に応じて、リスト全体から独立してキャッシュからアイテムを期限切れにすることができます。
キャッシングを実装する方法はいくつかありますが、httpcontext が最も簡単ですが、必ずしも最悪というわけではありません。memcachedまたはMS Velocityを見てください。どちらも ASP.NET キャッシュのバックエンドとして使用できます。特に memcached は、本当に良い仕事をしているという評判があります。
キャッシング ポリシーについては、自分に最適なものを決定する必要があります。個人的には、エンティティがリストに含まれているかどうかを確認するのではなく、更新/削除時に完全なリストをキャッシュから削除します。同時実行の問題を考慮する必要があります (誰かが別のエンティティの更新/削除を行う可能性があるため、リストをロックします)。エンティティをその場で更新することが理にかなっている場合もあれば (必要なすべてのデータを含む完全なオブジェクトがある場合)、時間の無駄になる場合もあります。これは、何らかの状態の変化により、エンティティが別の場所に移動する必要があるためです (たとえば、次の基準で並べ替える場合)。 LastChangedDate など)
フラッシュされたリストを更新するのに時間がかかりすぎないように、DB コードも最適化することを忘れないでください。
[OutputCache(Duration=10, VaryByParam="none")] キャッシュするすべてのアクションまたはコントローラーで使用するだけです。
http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-csから