【问题标题】:Is System.Web.Caching or System.Runtime.Caching preferable for a .NET 4 web applicationSystem.Web.Caching 还是 System.Runtime.Caching 更适合 .NET 4 Web 应用程序
【发布时间】:2012-06-11 19:16:04
【问题描述】:

我正在向 ASP.NET Web 应用程序添加缓存。这是 .NET 4,因此我可以使用 System.Runtime.Caching 命名空间中的类(据我了解,它被添加以提供与 System.Web.Caching 中的功能相似的功能,但对于非 Web-应用程序。)

但是由于这个一个网络应用程序,我最好使用 System.Web.Caching 吗?还是较新的 System.Runtime.Caching 在某些方面更胜一筹?

【问题讨论】:

    标签: c# asp.net caching .net-4.0


    【解决方案1】:

    Microsoft 建议将 System.Runtime.Caching 用于所有缓存目的。看到这个:http://msdn.microsoft.com/en-us/library/dd997357.aspx

    虽然,我遇到了几个线程,人们在使用 MemoryCache.Default 实例时遇到问题。一段时间后,它会停止正常工作。您使用 Add 或 Set 方法添加的任何项目实际上都不会添加到缓存中。我尝试了同样的方法,并且能够通过显式调用 MemoryCache.Default.Dispose() 方法重现此问题。

    以下是链接: MemoryCache Empty : Returns null after being set

    http://forums.asp.net/t/1736572.aspx/1

    我的建议是使用 System.Web.Caching (HttpContext.Current.Cache)

    更新:

    MS 已修复此问题。检查以下帖子中接受的答案: Runtime Cache Issue Resolved

    【讨论】:

    • 大+1!请注意,尽管 Microsoft 修复了该错误 - 请参阅 Scott Hanselman 对上述链接问题的回答。
    • 你能更新你的答案吗?我找到了这个问题和你的答案,但更多的搜索告诉我现在有一个修复程序,所以现在推荐 Runtime.Caching :)
    • 更新了答案以反映最新状态。
    • 如果您计划之后使用 MemoryCache.Default,则不应调用 MemoryCache.Default.Dispose() 方法。而是执行以下操作。 var memoryCache = MemoryCache.Default; memoryCache.Trim(100); //foreach (var item in memoryCache.ToList()) { memoryCache.Remove(item.Key); }
    【解决方案2】:

    System.Runtime.Caching 允许您缓存所有 .Net 应用程序,而不仅仅是 IIS 工作进程。因此,如果您需要在多个场景中访问缓存,请使用 System.Runtime。您还可以检查此缓存适配器,它允许您在运行时、Web 和应用程序结构缓存之间进行交换。 https://bitbucket.org/glav/cacheadapter

    还有一件事,如果您有一个多服务器场,并且具有负载平衡配置,请确保您有粘性会话或分布式缓存模型。

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      相关资源
      最近更新 更多