【发布时间】:2010-09-29 17:48:04
【问题描述】:
好奇是否有人对哪种方法更适合 asp.net 缓存有意见。选项一,缓存中较复杂的项目较少,或较不复杂的项目较多。
为了便于讨论,假设我的网站有 SalesPerson 和 Customer 对象。这些是非常简单的类,但我不想与数据库闲聊,所以我想将它们延迟加载到缓存中,并在我进行更改时使它们从缓存中失效——很简单。
选项 1 创建字典并缓存整个字典。当我需要从缓存中加载 SalesPerson 的实例时,我会从 Dictionary 中取出并针对 Dictionary 执行正常的键查找。
选项 2 为每一项的key加上前缀,直接存放在asp.net缓存中。例如,缓存中的每个 SalesPerson 实例都将使用前缀加上该对象的键的组合,因此它可能看起来像 sp_[guid] 并存储在 asp.net 缓存中,缓存中还有带有像 cust_[guid] 这样的键。
我对选项二的担心之一是条目的数量会变得非常大,在销售人员、客户和十几个其他类别之间,我可能在缓存中有 25,000 个项目,并且对字符串资源之类的东西进行高度重复的查找我在几个地方使用可能会付出代价,而代码会在缓存的密钥集合中查找它以在其他 25K 中找到它。
我确信在某些时候,在缓存中存储太多项目会导致收益递减,但我很好奇关于这些问题的意见。
【问题讨论】: