私のアプリケーションでは、MemoryCacheを使用していますが、アイテムの有効期限はありません。したがって、項目は、AbsoulteExpiration
またはSlidingExpiration
が設定されていないデフォルトポリシーでキャッシュに挿入されます。MemoryCache - アイテムの期限切れを防ぐ
最近、上位サーバーでは、キャッシュに問題が発生しました。これは、以前にキャッシュに挿入された希望の値の代わりにnull値を返したためです。期限切れになる項目だけでなく、有効期限が明示的に設定された項目もキャッシュから削除されることが判明しました。メモリ圧力の下で、値がCacheMemoryLimit
および/またはPhysicalMemoryLimit
を超えた場合、MemoryCacheは他の要素も削除します。
これを防止するにはどうすればよいですか?要素がキャッシュに一度設定されている場合、要素を再度安全にフェッチできることを確認する方法を教えてください。
私はPollingInterval
をいくらか大きな値に設定することを検討しましたが、潜在的な問題を遅らせるだけです(ポーリング間隔は正確な時間ではなく最大時間としてドキュメントで参照されます)。 PhysicalMemoryLimitPercentage
を100%に設定しても、物理的にインストールされたメモリを参照し、使用可能な仮想メモリ全体を参照しないため、問題は解決されません。あるいは私は間違っていて、本当に助けになるだろうか?
あなたの質問は、RAMの増加を提案したり、キャッシュからいくつかの値を定期的に削除するよう指示しています。永遠にキャッシュを埋めることはできません。 – lucky
代わりに、代わりに静的なConcurrentDictionaryを使用したいと思いますか? – Magnus
'CacheItemPolicy'には、設定可能な[優先度](https://msdn.microsoft.com/en-us/library/system.runtime.caching.cacheitempolicy.priority(v = vs.110).aspx)プロパティがあります。 「NotRemovable」に変更します。 –