【问题标题】:MemoryCache always returns "null" after first expirationMemoryCache 在第一次过期后总是返回“null”
【发布时间】:2012-05-02 12:56:59
【问题描述】:

我有以下问题,我有这种缓存管理:

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”。我检查了密钥并且总是正确的。

该问题仅出现在我的PC中的客户端服务器中,并且我的服务器运行良好。

谢谢。

编辑 II(进度)

当我们重新启动客户服务器中的应用程序池时,您的问题会在几个小时内解决。

我们的网站有一个特定的应用程序池,具有以下设置:

管道管理器模式:集成 框架:v4.0 启用 32 位应用程序:是的。

默认等其他设置。

在服务器上,我们有 2 个站点,一个启用了“启用 32 位应用程序”,如果两个都被禁用,则会发生错误,但不知道是不是这个问题。

编辑 III(进度)

由于我们未能解决问题,我们决定切换到Httpcontext.Current.Cache,我们可以解决问题。我们想要另一个解决方案并继续使用MemoryCache,但没有成功。

【问题讨论】:

  • 什么是“出境咨询”?
  • 也许您应该重新考虑吞下所有异常并返回 null。请改用 TryGetvalue。如果添加缓存的目的是为了提高性能,那么例外不是办法。
  • @RobertHarvey: 谷歌搜索“exirar andconsultation”会产生这篇文章作为第一个结果:)
  • @usr 我明白你的意思,但它在我的电脑和服务器上完美运行。只是客户错了。可能是 IIS 中的问题?
  • 我编辑我的问题,并在问题上取得进展

标签: c# asp.net-mvc iis memorycache


【解决方案1】:

复活一个老问题,但我相信这个问题是由于一个只在 ASP.NET 4.5 中修复的错误,但对早期版本有一个修补程序。

看到这个帖子:MemoryCache Empty : Returns null after being set

【讨论】:

    【解决方案2】:

    这种缓存通常要求您的代码采用“如果项目不在缓存中,则创建项目,使用创建的项目并添加到缓存,否则使用缓存中的项目”的形式.所以通常如果一个项目不在缓存中应该是一个问题。

    项目从缓存中消失的常见原因是内存使用率高。在这种情况下,内存缓存可能会在项目添加到缓存后立即驱逐它们。这种行为对于以 32 位 (x86) 运行的应用程序来说非常常见,尤其是在处理大量请求或大量数据的服务器上。

    验证 - 收集内存控制器和进程的位数。考虑使用MemoryCache.CreateCacheEntryChangeMonitor 和相应的事件添加代码来监听从缓存中删除的项目。

    【讨论】:

    • 谢谢,我已经回复了继续前进,但我无法解决。我用进度编辑我的问题。
    猜你喜欢
    • 2018-12-24
    • 2013-09-14
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多