在Silverlight中缓存静态类的数据

时间:2011-02-16 15:35:13

标签: c# silverlight caching

我有一个包含一些信息的静态类

public static class SampleDataCache
{
    private static Dictionary<string,SampleData> cacheDict = new Dictionary<string,object>()

    public static Get(string key)
    {
        if(!cacheDict.Contains[key])
            cacheDict.Add(key,new SampleData());

        return cacheDict[key];
    }
}

当我刷新页面时,我希望SampleDataCache保留其数据。

我能以简单的方式实现这一目标吗?

2 个答案:

答案 0 :(得分:4)

由于缓存以其当前形式存储在内存中,因此当页面刷新时数据自然会被遗忘 - 这是从那里开始的应用程序的新实例。但是,您可能有兴趣利用隔离存储来保持每个用户的数据。

对于独立存储,您基本上有一个包含的文件系统,您可以在其中存储数据,然后进一步检索它。正确方向的一个步骤可能是创建一个您希望表示缓存数据“片段”的类,使其可序列化,然后使用静态类作为缓存控制器,您可以从隔离存储读取和写入这些对象。

Quickstart: Isolated Storage in Silverlight

答案 1 :(得分:3)

你应该记住额外的if(没人理解; /)。而且你也可以更通用,更安全。你可以看下面,这是一个写得很好的缓存模式的例子也可以作为一个方面。

using System;
using System.Collections.Generic;

namespace SampleDataCache {

  public class SampleData {
    public string Name { get; set; }
  }

  public static class DataCache {
    private static readonly Dictionary<string, object> CacheDict
      = new Dictionary<string, object>();

    private static readonly object Locker = new object();

    public static T Get<T>(string key, Func<T> getSampleData) {
      if (!CacheDict.ContainsKey(key)) {
        lock (Locker)
          if (!CacheDict.ContainsKey(key)) {
            CacheDict.Add(key, getSampleData());
          }
      }
      return (T)CacheDict[key];
    }
  }

  public class Program {
    private static SampleData CreateSampleData() {
      return new SampleData() { Name = "Piotr Sowa" };
    }

    private static void Main(string[] args)
    {
      SampleData data = DataCache.Get("Author", CreateSampleData);
    }
  }
}

此致