【问题标题】:IIS and ASP.NET CachingIIS 和 ASP.NET 缓存
【发布时间】:2011-10-30 14:29:27
【问题描述】:

我创建了一个使用经典 ASP.NET 缓存的网站:

DataSet ds = new DataSet();
ds = (DataSet) Cache["MyDataSet"];

在 ASP.NET 代码中,我将持续时间设置为几个小时,但 IIS 会更早地重置缓存。
在 IIS 中,在哪里可以手动设置 ASP.NET 缓存的持续时间?

我有足够的 RAM,有完全加载的缓存和工作站点,我有大约 1/3 的空闲空间(总共 3GB,Web Server 2008R2)。

(我在缓存中有大量计算(几分钟),并且在工作期间我只更新了缓存的一小部分)

【问题讨论】:

  • 这句话是什么意思:IIS 更早地重置缓存?您如何得出 IIS 正在重置您的 ASPNET 缓存的结论?你有哪些具体的观察使你得出这个结论?
  • 您的缓存是否被清除或 IIS 是否回收
  • 您的应用程序池回收时间是多少?应用程序池回收时通常会清除缓存

标签: asp.net iis caching


【解决方案1】:

添加对象到Cache时,可以指定过期策略(绝对、滑动过期)。

Cache.Insert("CacheItem", yourobject,
    null, DateTime.Now.AddHours(3), 
    System.Web.Caching.Cache.NoSlidingExpiration);

See here获取更详细的解释。

以下是可能从缓存中删除对象的一些原因:

ASP.NET 可以出于以下原因之一从缓存中删除数据:

Because memory on the server is low, a process known as scavenging.

Because the item in the cache has expired.

Because the item's dependency changes.

为了帮助您管理缓存项,ASP.NET 可以通知您的应用程序 当项目从缓存中删除时。

清除

Scavenging 是在内存时从缓存中删除项目的过程 稀缺。某些项目在未被访问时被删除 时间或当项目被添加到时被标记为低优先级 缓存。 ASP.NET 使用 CacheItemPriority 对象来确定 首先清除哪些物品。有关详细信息,请参阅如何:添加 缓存的项目。过期

除了清理之外,ASP.NET 还自动从 过期时缓存。

【讨论】:

  • @Bzzz 如果您设置了优先级,正确的滑动或绝对过期并且您的服务器上的内存没有运行不足,您的对象将被保存在缓存中。如果您没有遇到其他问题,您可能会遇到其他问题。
  • “IIS 提前重置缓存”是什么意思? IIS 可能会停止 w3wp.exe,在这种情况下缓存会消失。但这不是 IIS 重置缓存;它是 IIS 停止进程。澄清你的陈述的意思。
  • @Icarus - 我认为设置优先级可以解决问题!谢谢!
  • @Cheeso - 有趣的一点,我一直认为这是 IIS 的问题(比如最大 asp.net 缓存、缓存时间等),因为在旧主机上我没有同样的问题。 ..
【解决方案2】:

为了测试您的元素何时自动从缓存中删除,您可以在发生这种情况时收到通知:ASP.NET 为此提供了 CacheItemRemovedCallback 委托。 Cache.Insert 语句有一个重载,所以你可以写类似

Cache.Insert(
        "CacheItem",
        yourobject, 
        null,
        DateTime.Now.AddHours(3), 
        System.Web.Caching.Cache.NoSlidingExpiration
        CacheItemPriority.Default,
        new CacheItemRemovedCallback(ObjectRemovedCallback));

(不确定我是否 100% 正确)然后由业务对象中的 ObjectRemovedCallback 方法处理。查看http://msdn.microsoft.com/en-us/library/7kxdx246.aspx 了解更多详情。您可以在这里找到缓存过早过期的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多