MemoryCacheの一般的な代替/実装はありますか?
基本クラスライブラリにはありません。自分でロールする必要がありますが、私は個人的に、必要なMemoryCache
APIを提供するラッパーを作成するだけです。
これにより、タイプの安全性が提供され、ボクシング/アンボクシングがないため、パフォーマンス上のメリットが得られます。
型安全性は、ラッパークラスでかなり簡単に処理できます。ボックス化/アンボックス化は、値型(クラスではない)を格納している場合にのみ問題になります。それでも、これが真のパフォーマンスになるのに十分な頻度でキャッシュからプッシュおよびプルする可能性は低いため、最小限に抑えられます。問題。
型の安全性と使いやすさについては、実際に独自のメソッドを作成して、MemoryCache
アイテムの呼び出しをジェネリックメソッドでラップしました。これにより、APIの観点から少し優れた使用法が可能になります。これは非常に簡単です。通常、次のような方法が必要です。
public T GetItem<T>(string key) where T : class
{
return memoryCache[key] as T;
}
同様に、同じ方法で値を設定するメソッドを作成できます。
編集:私が興味を持っているもう1つのことは、別のキータイプを使用することです。デフォルトはSystem.Stringです。
これはで直接サポートされていないMemoryCache
ため、独自のキー生成を行うにはかなりの作業が必要になります。1つのオプションは、タイプセーフラッパーをFunc<T, string>
作成することです。これにより、値に基づいて文字列キーを生成することもできます。これにより、任意のタイプのキャッシュエントリを生成できますT
。ただし、もちろん、比較の一部として必要な文字列にすべてのデータを含めるように注意する必要があります。