2016-09-24 89 views
1

我累了設置填充IReadOnlyList緩存,但它總是空:的MemoryCache不存儲IReadOnlyList

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

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

沒有在高速緩存設置。但如果我將其更改爲:

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

如何填充'dataList'列表? –

+0

它實際上是在函數中傳遞的,爲了讓示例簡單,我刪除了包裝調用的函數。 – Josh

+0

該函數返回的對象的類型是什麼? (不是函數返回類型,而是特定情況下返回值的實際類型)。我不認爲變量類型很重要,但也許對象的類型很重要。 –

回答

0

MemoryCache正在緩存對第一個示例中列表的引用和第二個示例中列表的副本。

它必須是您的代碼重新使用作爲dataList傳入的列表,因此您需要緩存副本。調用ToList()進行復制。