2009-01-14 95 views
3

着眼于在asp.net web应用程序中实现一些常见查找数据的缓存。缓存常见查找数据 - 策略

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

我已经做了一些研究System.Web.Caching,但它似乎没有提供任何优于单例方法。我们没有使用SQLServer,因此在数据可能发生变化的罕见情况下,我们无法利用SQLCacheDependency。

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

回答

3

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

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

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

+0

单身对象使用的内存也存储在应用程序池中。 – 2010-04-21 15:40:30

1

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

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

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

我介绍的业务对象框架称为CSLA.Net,在Expert C# 2008 Business Objects中有详细的解释。这本书还有一个适用于VB.Net的版本。

0

我有两种经验。我更喜欢单件模式,原因如下:

  1. 它不依赖于ASP.NET
  2. 它可以让你使用查找在bisiness层验证或什么的。
  3. 如果查找变得更加复杂并且您决定不缓存它,则重构起来会更容易。