Enterprise Library 5と、それがWebアプリケーションで提供するCacheManagerを使用しています。アプリケーションで高負荷テストを開始するまで、すべてが正常に機能しているようです。
IDに基づくキーを使用して、データベースからレコードをキャッシュしています。キャッシュから常に1つのアイテムを要求しているわけではなく、キャッシュからアイテムのリストを取得する必要がある場合があります。このために、Select(e => CacheManager.GetData(id_from_list))を作成し、キャッシュからアイテムのリストを返すLINQクエリがあります。ほとんどの場合、これは正常に機能しますが、負荷が大きい場合、キャッシュマネージャーがキャッシュからの読み取り操作と書き込み操作の両方で実行しているロックが原因で、GetDataメソッドがボトルネックになります。基本的に、一度に1つのスレッドのみがキャッシュからデータを読み取ることができます。
他の誰かが同じ問題に遭遇しましたか、そしてこれを克服する方法を見つけましたか?
注:実際にアイテムのリストをキャッシュし、リスト内のアイテムのIDからキーを作成しようとしました。これは実際に問題を解決し、cachemanager.getdataはもはやボトルネックではありません...しかし...多くのリストのキャッシュに各アイテムを何千回も持つ可能性があるため、これは明らかに良い解決策ではありません。