.Net System.Runtime.Caching.MemoryCache - 存储单个集合或单个自定义对象?

时间:2012-05-22 16:34:17

标签: c# asp.net caching .net-4.0 memorycache

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

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

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

  1. 效率更高,因为我将直接从中获取Customer对象 缓存而不必在Keyed上执行另一次查找 集合。
  2. 我会将新的Customer对象添加到缓存中 第一次要求。懒惰的加法而不是 预先构建整个缓存。
  3. 有关在表现和其他因素方面使用其中一对的想法吗?

1 个答案:

答案 0 :(得分:3)

解决方案将取决于您需要将对象作为集合处理的频率。

作为集合存储的原因:

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

单独存储的原因:

  • 你一次只能或者大部分都在单个对象上工作。
  • 您希望根据自己的使用频率,而不是整个集合的频率,从缓存中创建和删除每个对象。

因此,比较您可能的使用方案,并相应地选择。除非你写了很多.Where.Select等,否则有可能会调用或有理由传递整个集合,然后单独存储将是更好的选择。