我应该使用 HttpRuntime.Cache 吗?

Posted

技术标签:

【中文标题】我应该使用 HttpRuntime.Cache 吗?【英文标题】:Should I use HttpRuntime.Cache? 【发布时间】:2011-12-26 21:44:53 【问题描述】:

我是asp.net的初学者,有几个关于缓存的问题:

    HttpRuntime.Cache 只提供了几个方法,我想我可以自己用 Dictionary 实现这些方法。 如果 HttpRuntime.Cache 比 Dictionary 好很多,为什么有些人想实现自己的缓存框架。 MS Enterprise Cache Block 怎么样?

【问题讨论】:

【参考方案1】:

HttpRuntime.Cache 只提供几个方法,我想我可以 自己用 Dictionary 实现这些方法。

你想错了。 HttpRuntime.Cache 不仅仅是一个简单的字典。它提供线程安全和缓存过期策略。它提供了使用自定义实现的可能性,并从分布式缓存中受益,这对网络农场很有帮助。用字典来实现这一点可能是你可能不想冒险的大量工作,因为你基本上是在重新发明***,即使重新发明***不会打扰你,做对的机会也很渺茫。

2)如果HttpRuntime.Cache比Dictionary好很多,为什么有些人 想实现自己的缓存框架。

人们不想这样做。

3) MS Enterprise Cache Block 怎么样?

这是重型火炮,当您需要简单的缓存时并不总是必要的,这可以通过框架已经为您提供的开箱即用的功能来实现。

备注:在 .NET 4.0 中,您应该使用新的 System.Runtime.Caching 命名空间而不是 HttpRuntime.Cache

所以回答你的问题:Should I use HttpRuntime.Cache

是的,除非您使用的是 .NET 4.0,在这种情况下您应该使用来自新的 System.Runtime.Caching 命名空间的类。

【讨论】:

感谢您的精彩回答。我还有一个问题:我看到有人在像 Console 这样的非 Web 应用程序中使用 HttpRuntime.Cache,我觉得这有点奇怪。你见过吗? @Domi.Zhang,是的,我已经看到了。它可以工作,但需要依赖 System.Web 程序集。这就是微软决定将缓存外部化到 .NET 4.0 中的单独程序集的原因。 Darin,如果我想要 Httpruntime 缓存中的过期时间怎么办?我在 System.Runtime.Caching 中找不到它 @RoyiNamir,.Add() 方法允许您通过CacheItemPolicy 来控制各种选项。 更新 HttpRuntime.Cache 的“控制台应用程序使用”是 msdn 文档here 中的一个注释警告:“Cache 类不打算在 ASP.NET 应用程序之外使用。它的设计和经测试可在 ASP.NET 中为 Web 应用程序提供缓存。对于其他类型的应用程序,例如控制台应用程序或 Windows 窗体应用程序,请使用 ObjectCache 类。"

以上是关于我应该使用 HttpRuntime.Cache 吗?的主要内容,如果未能解决你的问题,请参考以下文章

C# HttpRuntime.Cache.Insert() 不保存缓存值

在HttpRuntime.Cache.Add中为空,值为null

HttpRuntime.Cache与HttpContext.Current.Cache

HttpRuntime.Cache

System.Web.Cache 和 HttpRuntime.Cache 内存位置

ASP.net HttpRuntime.Cache 使用的默认序列化是啥