MemoryCache在第一次到期后始终返回“null”
我有以下问题,我有这种缓存管理:
public class CacheManager : ICacheManager { private readonly ObjectCache cache; public CacheManager() { this.cache = MemoryCache.Default; } public void AddItem(string key, object itemToCache, double duration) { var end = DateTime.Now.AddSeconds(duration); this.cache.Add(key, itemToCache, end); } public T Get(string key) where T : class { try { return (T)this.cache[key]; } catch (Exception ex) { return null; } } public void Remove(string key) { this.cache.Remove(key); } }
很简单。
编辑I(问题文本中的错误修复)
问题:当任何密钥的缓存过期时,以下所有调用以获取缓存中的任何对象都将返回“null”。 我检查钥匙,总是正确的。
问题仅发生在我的PC中的客户端服务器中,并且我的服务器工作正常。
谢谢。
编辑II(进展)
当我们在客户的服务器中重新启动应用程序池时,您的问题将在几个小时内解决。
我们的网站有一个特定的应用程序池,具有以下设置:
管道管理器模式:集成框架:v4.0启用32位应用程序:True。
其他设置,如默认。
在服务器上,我们有2个站点,其中一个启用了“启用32位应用程序”,如果两个站点都被禁用,则发生错误,但不知道这是否是问题所在。
编辑III(进展)
由于我们未能解决问题,我们决定切换到Httpcontext.Current.Cache ,我们可以解决问题。 我们想要另一个解决方案并继续使用MemoryCache但没有结果。
复活一个旧问题,但我认为这个问题是由于一个只在ASP.NET 4.5中修复的错误,但是对于早期版本有一个修补程序。
看到这个线程: MemoryCache Empty:设置后返回null
这种缓存通常要求您的代码处于“如果某个项目不在缓存中然后创建项目,使用已创建的项目并添加到缓存中,否则使用缓存中的项目”。 因此,如果项目不在缓存中,通常应该是一个问题。
项目从缓存中消失的常见原因是内存使用率很高。 在这种情况下,内存高速缓存可以在它们添加到高速缓存后立即逐出。 对于以32位(x86)运行的应用程序,此行为非常常见,特别是在处理大量请求或大量数据的服务器上。
validation – 收集内存控制器并处理’位数。 考虑使用MemoryCache.CreateCacheEntryChangeMonitor和相应的事件添加代码以侦听从缓存中删除项目。
上述就是C#学习教程:MemoryCache在第一次到期后始终返回“null”分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/954453.html