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

本文关键字:单个 集合 自定义 对象 存储 System Runtime Caching MemoryCache Net | 更新日期: 2023-09-27 18:35:10

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

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

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

  1. 更高效,因为我将直接从 客户对象缓存,而无需对键控执行另一次查找收集。
  2. 我只会在缓存中添加一个新的 Customer 对象,当它是首次请求。有点懒惰的添加,而不是预构建整个缓存。

关于在性能和其他因素方面使用一个与另一个有什么想法吗?

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

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

存储为集合的原因:

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

单独存储的原因:

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

因此,请比较您可能的使用方案,并相应地进行选择。很有可能,除非您正在编写大量.Where.Select等,电话或有理由传递整个集合,否则单独存储将是更好的选择。