【问题标题】:.Net 4.0 MemoryCache Clearing.Net 4.0 内存缓存清除
【发布时间】:2012-10-07 00:11:24
【问题描述】:

我在我的 WCF 服务中使用 .Net 4.0 MemoryCache。 我最初使用的默认缓存如下:

var cache = MemoryCache.Default;

然后按照通常的模式尝试在缓存中查找内容,获取,然后 如果没有找到则设置到缓存中(代码sn-p/伪代码如下):

var geoCoordinate = cache.Get(cacheKey) as GeoCoordinate;
if (geoCoordinate == null)
{
    geoCoordinate = get it from somewhere;
    cache.Set(cacheKey, geoCoordinate, DateTimeOffset.Now.AddDays(7));
}

我发现我的条目在大约 1 分钟后消失了。 2分钟。即使我的代码将丢失的条目放回缓存中,后续的缓存 Gets 也会返回 null。 我的 WCF 服务由 IIS 7.5 托管。如果我回收应用程序池,一切都会正常工作 2 分钟,但随后会重复上述模式。

在做了一些研究之后,我做了以下替换: var cache = MemoryCache.Default;

// 使用新代码创建缓存如下:

 var config = new NameValueCollection();
 //Hack:  Set Polling interval to 10 days, so will no clear cache.
 config.Add("pollingInterval", "10:00:00:00");
 config.Add("physicalMemoryLimitPercentage", "90");
 config.Add("cacheMemoryLimitMegabytes", "2000");

 //instantiate cache
 var cache = new MemoryCache("GeneralCache", config);

似乎无论我将什么放入physicalMemoryLimitPercentagecacheMemoryLimitMegabytes 似乎都没有帮助。但是将pollingInterval 放到一个大的datespan 上就可以了。

ie:如果我设置如下: config.Add("pollingInterval", "00:00:15:00"); 然后一切正常 15 分钟。

注意:如果我的 WCF 服务由我的开发环境中的 IISExpress 托管,我将无法重现。 当我的 WCF 服务由 IIS 7.5 托管时,这似乎也会发生。 我在 IIS 7.5 上的应用程序池未回收。

有没有人经历过这样的事情? 我看过以下内容: MemoryCache does not obey memory limits in configuration

谢谢,

马特

【问题讨论】:

    标签: wcf caching .net-4.0


    【解决方案1】:

    我也看到了这个问题,并通过一个简单的复制器项目向 MS here 提交了一个错误。

    MS 在我提交的上述错误中已经解决了这个问题 - 在那里进行了工作,即将推出 .net 4 的 QFE,并确认这在 4.5 中不是问题 我还没有尝试过解决方法

    但是,我可以提供更多信息,说明我自己需要的条件来重新创建它。应用程序池需要处于集成管道模式才能看到此问题 - 经典模式修复了此问题,但消除了迁移到 IIS 7.5 的一些好处。 同样,在使用集成模式时,如果我使用内置应用程序池标识(例如 ApplicationPoolIdentity),我也没有看到此问题。但是,我的应用程序需要使用服务帐户作为自定义身份运行,此时我看到了该行为。因此,如果您不需要集成模式或自定义身份,您可以解决这个问题。

    也许内置帐户有权限进行由 pollingInterval 发起的缓存统计收集,而我的自定义 Identity 没有,我不知道。

    希望这会有所帮助,甚至希望其他人可以加入更多的点来找出更好的解决方法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 2021-05-30
    • 2014-02-13
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多