我有以下问题,我有这种缓存管理:
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<T>(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”。我检查了 key 并且总是正确的。
该问题仅出现在我 PC 中客户端的服务器中,并且我的服务器运行良好。
谢谢。
编辑 II(高级)
当我们重新启动客户服务器中的应用程序池时,您的问题解决了几个小时。
我们的站点有一个特定的应用程序池,具有以下设置:
管道管理器模式:集成
框架:v4.0
启用 32 位应用程序:True。
其他设置,如默认。
在服务器上我们有 2 个站点,一个启用了“启用 32 位应用程序”,如果两者都被禁用,则会发生错误,但不知道这是否是问题所在。
编辑 III(高级)
由于无法解决问题,我们决定切换到 Httpcontext.Current.Cache ,我们可以解决问题。我们想要另一个解决方案并继续使用 MemoryCache 但没有结果。
最佳答案
重新提出一个老问题,但我相信这个问题是由于一个仅在 ASP.NET 4.5 中修复的错误,但对早期版本有一个修补程序。
请参阅此线程:MemoryCache Empty : Returns null after being set