Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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# 使用System.Runtime.Caching,但当我去检索它时,它';什么是空的?_C#_.net_Wpf_Caching - Fatal编程技术网

C# 使用System.Runtime.Caching,但当我去检索它时,它';什么是空的?

C# 使用System.Runtime.Caching,但当我去检索它时,它';什么是空的?,c#,.net,wpf,caching,C#,.net,Wpf,Caching,我有一个C#WPF应用程序,我正试图使用新的System.Runtime.Caching实现缓存。当我向缓存中添加一些东西时,我会检查它并确认它在那里,它就是。但是,当我重新启动应用程序时,它从缓存中消失了 因此,在下面的示例中,输出将始终是“find It”。我所期望的是,它第一次运行时会输出“找到它”,但随后的所有时间(接下来的10天),它都会输出“已经存在”,但它不会。我已经通过调试器运行了它,并确认每次重新启动应用程序时,cache[“MYDATA”]都将等于null 我做错了什么?谢谢

我有一个C#WPF应用程序,我正试图使用新的System.Runtime.Caching实现缓存。当我向缓存中添加一些东西时,我会检查它并确认它在那里,它就是。但是,当我重新启动应用程序时,它从缓存中消失了

因此,在下面的示例中,输出将始终是“find It”。我所期望的是,它第一次运行时会输出“找到它”,但随后的所有时间(接下来的10天),它都会输出“已经存在”,但它不会。我已经通过调试器运行了它,并确认每次重新启动应用程序时,cache[“MYDATA”]都将等于null

我做错了什么?谢谢

Dictionary<Type, Dictionary<string, object>> _CachedObjects = null;
ObjectCache cache = MemoryCache.Default;

_CachedObjects = cache["MYDATA"] as Dictionary<Type, Dictionary<string, object>>;
if (_CachedObjects == null)
{
     _CachedObjects = new Dictionary<Type, Dictionary<string, object>>();

    //code that fills _CachedObjects

     CacheItemPolicy policy = new CacheItemPolicy();
     policy.AbsoluteExpiration = DateTimeOffset.Now.AddDays(10.0);

     cache.Set("MYDATA", _CachedObjects, policy);

     if(cache["MYDATA"] != null)
          Console.WriteLine("Found It");
}
else
     Console.WriteLine("Was already present");
Dictionary\u CachedObjects=null;
ObjectCache=MemoryCache.Default;
_CachedObjects=cache[“MYDATA”]作为字典;
if(_CachedObjects==null)
{
_CachedObjects=新字典();
//填充缓存对象的代码
CacheItemPolicy policy=新的CacheItemPolicy();
policy.AbsoluteExpiration=DateTimeOffset.Now.AddDays(10.0);
Set(“MYDATA”,缓存对象,策略);
如果(缓存[“MYDATA”]!=null)
Console.WriteLine(“找到了”);
}
其他的
Console.WriteLine(“已存在”);

内存缓存对象保存在易失性内存中,因此您需要扩展
ObjectCache
对象以存储在文件系统或其他非易失性存储机制中。

这不是设计的吗?我的意思是,如果重新启动应用程序,缓存将被清除。因此,您可能需要使用外部缓存源。如果是这样,那么缓存与静态属性相比有什么优势?我不明白。缓存它有什么意义?我可以把它存储在一个变量中,得到同样的效果,不是吗?实际上,在我上面的示例中,_CachedObjects当前是我在应用程序中全局使用的静态类的静态属性。我试图通过存储内容来优化性能,这样就不必重新加载。如果它丢失了,那么将它转换为ObjectCache有什么意义呢?关键是,如果您从缓存中检索某个东西,它比从磁盘或web服务中获取它要快。所以,当你的应用程序启动时,你可以缓存东西,然后从缓存中提供服务。这就是为什么很多服务器应用程序需要一段时间才能上线,因为它们正在急切地缓存许多东西,以便从长远来看提高应用程序的性能。是的,但这比将其存储在属性中要好多少呢?是否缓存中存储的任何内容都不会消耗应用程序中的内存?否则,我想不出为什么在变量/属性上使用缓存是有意义的。@Nullqwerty-通过
CacheItemPolicy
对象上的可用选项,真正显示了它的有用性。例如,您可以设置滑动过期
TimeSpan
,如果在一定时间内未使用该项,则会导致该项被删除。啊……好的。太糟糕了…持久缓存会非常好。哦,好吧。谢谢