缓存常见的查找数据 - 策略

时间:2009-01-14 14:47:35

标签: asp.net caching

在asp.net Web应用程序中实现一些常见查找数据的缓存。

过去,我创建了一个单例,它创建了一堆哈希表,它们都有公共访问器。这对于永不改变的只读数据非常有效。

我已经对System.Web.Caching做了一些调查,但它似乎没有提供超过单例方法的任何好处。我们没有使用SQLServer,因此在数据可能发生变化的极少数情况下,我们无法利用SQLCacheDependency。

任何人都有这些替代方案的经验吗?或者有更好的建议?

3 个答案:

答案 0 :(得分:3)

System.Web.Caching的一个好处是内存存储在应用程序池中。这很方便,因为在应用程序池上setup memory/processing limits非常容易。

当我们对应用程序进行压力测试时,我遇到了这个问题(每个用户任务都需要昂贵的计算)。随着我们添加越来越多的用户,缓存占用了所有可用内存。一旦我们在应用程序池上设置内存限制,一切都会自行处理。缓存有LRU algorithms来管理内存。

我不知道缓存中的数据是否依赖于负载,但如果是,则这是一个方便的好处。

答案 1 :(得分:1)

我无法谈论System.Web.Caching的好处,因为像我一样,我通常实现了查找表数据结构的单例实例。 singleton类还公开了一个InvalidateCache()方法来处理数据可能发生变化的罕见情况。

如果您正在构建一个业务对象库,以便在asp.net和winforms中使用,那么您可能决定避免使用System.Web.Caching。

我使用的Business Object框架为名为NameValueListBase< TKey,TValue>的查找表提供了一个基类。此通用基类提供强类型辅助方法。您可以开发一个类似的基类并公开自己的帮助器方法,而不是仅公开System.Collections.Generic.Dictionary的实例。

我引用的业务对象框架称为CSLA.Net,在Expert C# 2008 Business Objects中有详细解释。这本书的版本也可供VB.Net使用。

答案 2 :(得分:0)

我对两者都有经验。我更喜欢单身模式,原因如下:

  1. 它与asp.net无关。
  2. 它允许您使用bisiness层中的查找来验证或其他任何内容。
  3. 如果查找变得更复杂并且您决定不对其进行缓存,则更容易重构。