Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缓存静态类';Silverlight中的s数据_C#_Silverlight_Caching - Fatal编程技术网

C# 缓存静态类';Silverlight中的s数据

C# 缓存静态类';Silverlight中的s数据,c#,silverlight,caching,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])

我有一个静态类,其中包含一些信息

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
{
私有静态字典cacheDict=新字典()
公共静态Get(字符串键)
{
如果(!cacheDict.包含[key])
Add(key,newsampledata());
返回cacheDict[key];
}
}
当我刷新页面时,我希望SampleDataCache保留其数据


我能用简单的方法实现这一点吗?

因为缓存以其当前形式存储在内存中,所以当页面刷新时,数据自然会被遗忘——这是从那里开始的应用程序的一个新实例。但是,您可能对利用独立存储来保存每个用户的数据感兴趣

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


你应该记住额外的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);
    }
  }
}
使用系统;
使用System.Collections.Generic;
命名空间SampleDataCache{
公共类抽样数据{
公共字符串名称{get;set;}
}
公共静态类数据缓存{
专用静态只读字典CacheDict
=新字典();
私有静态只读对象锁定器=新对象();
公共静态T Get(字符串键,Func getSampleData){
如果(!CacheDict.ContainsKey(键)){
锁(储物柜)
如果(!CacheDict.ContainsKey(键)){
Add(key,getSampleData());
}
}
返回(T)CacheDict[key];
}
}
公共课程{
私有静态SampleData CreateSampleData(){
返回新的SampleData(){Name=“Piotr Sowa”};
}
私有静态void Main(字符串[]args)
{
SampleData=DataCache.Get(“Author”,CreateSampleData);
}
}
}

关于

嗯。。。
Application
类的
ApplicationLifetimeObjects
属性如何?为什么要去隔离仓库?是的。。。这适用于WinForms和WPF。不是在银光下。是的,虽然它很好地解释了一个通用实现(尽管设计过度),但它实际上并没有解决这个问题。记住,仅仅因为它是静态的并不意味着它解决了问题,特别是在Silverlight和/或ASP.NET应用程序中。