1

私はWebサービスからデータを取得していますが、通常、データを取得した後はデータが変更されません。このデータは、さまざまなモデルオブジェクトで参照されます。これをMVCにキャッシュする最良の方法は何でしょうか。このデータを使用するモデルクラスの静的ディクショナリを考えていましたが、複数のスレッドが読み取りと書き込みを行う可能性があります。助言がありますか?

4

1 に答える 1

0

あなたのアイデアはかなり良いと思います(とにかく私がこれまでやってきたことです)。
唯一の落とし穴は、辞書への同時アクセスを回避する必要があることです。そのため、辞書をプライベートにし、アクセサーメソッドに読み取りと書き込みの両方にロックを使用させる(KとVを独自のタイプに置き換えます)。

public class CacheClass {
    private static object DictLock = new Object();
    private static Dictionary<K, V> CachedData;

    public static V ReadDictionary(K key) {
         V temp;
         lock (DictLock) {
              temp = CachedData[key];
         }

         return temp;
    }
    public static void SetDictionaryValue(K key, V value) {
         lock (DictLock) {
             CachedData.Add(key, value);
         }
    }
}  

他の代替手段には、ConcurrentDictionary(.NET 4以降)の使用が含まれます。
これは明らかにキャッシュのエージングを処理しません。しかし、あなたが自分でこれを制御しているように私には思えます。

于 2012-04-08T02:03:09.287 に答える