2011-02-16 50 views
7

数据我拥有一些信息缓存静态类的在Silverlight

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以保持其数据。

我可以通过简单的方法实现吗?

回答

4

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

对于独立存储,您基本上拥有一个包含的文件系统,您可以在其中存储数据,然后进一步检索它。向正确方向迈出的一步可能是让一个类代表一块'缓存数据',使其可序列化,然后使用静态类作为缓存控制器,您可以读写这些对象并将其写入独立存储。

Quickstart: Isolated Storage in Silverlight

+0

谢谢,我会试试看 – Stecya 2011-02-16 15:45:29

+0

呃... ...怎么样了`Application`类的`ApplicationLifetimeObjects`财产?为什么去孤立存储? – bleepzter 2012-08-24 15:35:19

3

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

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); 
    } 
    } 
} 

问候