3

我正在使用 MemoryCache (.net 4.0) 实现缓存,以缓存将由我网站的所有用户使用的全局数据。

我最初的方法: 存储一个 KeyedCollection,它将保存一个带有键的 Customer 对象的集合以获取单个对象。此集合最多可包含 250 个此类对象。每当缓存过期时,我都会重建 KeyedCollection 并将其添加到缓存中。

新方法 现在,我在想为什么不将每个 Customer 对象直接存储到缓存中,并将 customerid 作为查找键。因此,与单个 KeyedCollection 相比,MemoryCache.Default 最多有 250 个此类 Customer 对象。好处:

  1. 效率更高,因为我将直接从缓存中获取 Customer 对象,而无需对 Keyed Collection 执行另一次查找。
  2. 我只会在第一次请求时将新的 Customer 对象添加到缓存中。相对于预先构建整个缓存而言,这是一种惰性添加。

关于在性能和其他因素方面使用一种与另一种的想法?

4

1 回答 1

3

解决方案将取决于您需要多久将对象作为一个集合进行处理。

收藏为收藏的原因:

  • 单独存储每个对象,如果始终填充所有 250 个对象,则会占用更多空间,因为缓存中的每个项目都会有一个关联的CacheItemPolicy. 但是,这种情况可能不太可能。
  • Linq不会在集合上提供强类型扩展方法。(扩展方法可用,但 MemoryCache 项公开为KeyValuePair<string, object>)。

单独存放的原因:

  • 您一次只或大部分将要处理一个对象。
  • 您希望每个对象根据其自身的使用频率而不是整个集合的使用频率来创建和从缓存中删除。

因此,比较您可能的使用场景,并做出相应的选择。除非您正在编写大量.Where,.Select等调用或有理由传递整个集合,否则很有可能,单独存储将是更好的选择。

于 2012-05-22T18:02:12.347 回答