C# 使用System.Runtime.Caching,但当我去检索它时,它';什么是空的?
我有一个C#WPF应用程序,我正试图使用新的System.Runtime.Caching实现缓存。当我向缓存中添加一些东西时,我会检查它并确认它在那里,它就是。但是,当我重新启动应用程序时,它从缓存中消失了 因此,在下面的示例中,输出将始终是“find It”。我所期望的是,它第一次运行时会输出“找到它”,但随后的所有时间(接下来的10天),它都会输出“已经存在”,但它不会。我已经通过调试器运行了它,并确认每次重新启动应用程序时,cache[“MYDATA”]都将等于null 我做错了什么?谢谢C# 使用System.Runtime.Caching,但当我去检索它时,它';什么是空的?,c#,.net,wpf,caching,C#,.net,Wpf,Caching,我有一个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
,如果在一定时间内未使用该项,则会导致该项被删除。啊……好的。太糟糕了…持久缓存会非常好。哦,好吧。谢谢