MemoryCache不存储IReadOnlyList

时间:2016-09-24 22:06:43

标签: c# .net .net-4.6 memorycache

我厌倦了将填充的IReadOnlyList设置为缓存,但它始终为null:

CacheItemPolicy cip = new CacheItemPolicy(); // no expiration
IReadOnlyList<T> dataList = [populate var]

if (dataList != null)
{
   MemoryCache.Default.Set(_cacheKey, dataList, cip);
}

Cache中没有设置任何内容。但如果我把它改为:

List<T> list = null;
CacheItemPolicy cip = new CacheItemPolicy(); // no expiration
IReadOnlyList<T> dataList = [populate var]

if (dataList != null)
{
   list = dataList.ToList();       
   MemoryCache.Default.Set(_cacheKey, list, cip);
}

它有效。 MemoryCache不支持接口或IReadOnlyList对象吗?

1 个答案:

答案 0 :(得分:0)

MemoryCache正在缓存第一个示例中列表的引用和第二个示例中列表的副本。

必须是您的代码重用作为dataList传入的列表,因此您需要缓存副本。调用ToList()进行复制。