English 中文(简体)
缓存常用的查找数据 - 策略
原标题:
  • 时间:2009-01-14 14:47:35
  •  标签:

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

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

我有点研究了一下System.Web.Caching,但它似乎没有单例方法更好。由于我们没有使用SQLServer,所以对于数据可能会发生变化的情况,我们无法利用SQLCacheDependency。

任何人有过这两种选择之一的经验吗?或者有更好的建议吗?

问题回答

System.Web.Caching的一個好處是記憶體存儲在應用程序池中。這很方便,因為可以非常容易地在應用程序池上設置記憶體/處理限制。

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

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

我无法谈论System.Web.Caching的好处,因为像您一样,我通常实现查找表数据结构的单例实例。单例类还公开了一个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版本的书可供阅读。

我两种都有经验,但我更喜欢单例模式,因为有以下几个原因:

  1. It s not tied to asp.net
  2. It allows you to use the lookup in the bisiness layer to validate or whatever.
  3. It s easier to refactor if the lookup becomes more complicated and you decide not to cache it.




相关问题
热门标签