46

WCF サービスの要求レベルでキャッシュを実装しようとしています。このサービスへの各リクエストは、多数のデータベース呼び出しを実行します。複数のデータ収集者を考えてください。1 つのデータ コレクターが、前のデータ コレクターによって既に取得された情報にアクセスできるようにする必要があります。

リクエストごとに特定のインスタンスを作成することにより、これに新しい.Net 4.0メモリキャッシュを使用しようとしていました。

これは良い考えですか?それとも、単に Dictionary オブジェクトを使用する必要がありますか?

ところで:データ収集は並行して行われるため、ロックに関してはより複雑になりますが、そのために並行収集を使用することもできます。

4

1 に答える 1

57

ある種の有効期限ロジックが必要ない場合は、並行コレクションを使用することをお勧めします。とクラスを組み合わせた単一エントリのキャッシュメカニズムを簡単に実装できます。LazyとConcurrentDictionaryの組み合わせに関する別のリンクがあります。ConcurrentDictionaryLazy

アイテムの有効期限が切れる必要がある場合は、組み込みのMemoryCacheを使用し、ダブルチェックのロックパターンを実装して、キャッシュアイテムの単一の取得を保証することをお勧めします。ダブルチェックロックのすぐに使える実装は、.NETMemoryCacheを適切に使用するためのロックパターンにあります。

于 2012-09-26T06:55:51.723 に答える