MemoryCacheの一般的な代替/実装はありますか?
基本クラスライブラリにはありません。個人的には私が個人的には、あなたが望むAPIを提供するMemoryCache
のラッパーを作成するだけで、自分自身をロールバックする必要があります。
これは、型の安全性は、ラッパークラスではかなり容易に取り扱うことができていないボクシング/アンボクシングとして
を型の安全性を提供し、パフォーマンス上の利点を提供します。ボクシング/アンボクシングは、値の型(クラスではない)を格納していてもそれが最小限に抑えられている場合にのみ問題になります。キャッシュを頻繁にプッシュしたりプルしたりすることはほとんどありません問題。型の安全性と使いやすさについては
、私は実際にAPIの観点からビットよりよい使用を可能にする一般的な方法にMemoryCache
項目の呼び出しをラップするために自分自身のメソッドを書きました。これは非常に簡単です。通常、次のようなメソッドが必要です。
public T GetItem<T>(string key) where T : class
{
return memoryCache[key] as T;
}
同様に、同じ方法で値を設定する方法を作成できます。
EDIT:私が興味を持っている別のものは、異なるキータイプです。デフォルトはSystem.Stringです。
これはMemoryCache
で直接サポートされていないため、独自のキー生成を行うにはかなりの労力が必要です。 1つのオプションは、タイプセーフなラッパーを作成することです。Func<T, string>
には、値に基づいて文字列キーを生成する機能があります。これにより、タイプT
のキャッシュエントリを生成できます。ただし、比較の一環として必要な文字列にすべてのデータを含めるように注意する必要があります。
は、しかし、あなたは唯一のことができると思います1つのタイプをキャッシュする?私はこれをあまりにも多くのコストを心配することはありません、ボクシングの部分は非常に基本的な値の種類に無視されます。 –
@AdamHouldsworth:はい、それが意図されています。私は1つだけのタイプを返すスライディング有効期限を持つデータベースマップ上にキャッシュをラッピングしています。 – caesay
そのタイプは値タイプですか? –