2011-10-28 148 views
8

我發現自己進入了一個沒有正確清理的CacheItem。雖然看MSDN和我糾正成使用基於UTC的計算,我發現這混亂的信息:緩存「優先級」和「絕對優先」如何協同工作?

AbsolutExpiration用於設置的一個「保活」 CacheItemPriority.NotRemovable用於強制CacheItem永久存在。沒有關於什麼屬性覆蓋另一個的通知。

下面的代碼會進行編譯,並且SQL事件探查器也會確認只查詢一次數據庫,而其他每個請求都來自緩存。

CacheItemPolicy _cachePolicy = new CacheItemPolicy() 
{ 
    AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)), 
    Priority = CacheItemPriority.NotRemovable 
}; 

我假設這段代碼強制緩存項目永久保留,但在創建12小時後清除,符合MSDN關於設置的註釋。

「緩存實現應設置NotRemovable優先級僅在緩存實現提供了一些方法來從緩存中驅逐 條目和管理緩存條目的數量 緩存條目」

然後另一方面,爲什麼兩種房產都可以一起工作?實施是否帶來某種「更不可移動」?

+0

由於不清楚的文檔,我自己在想這個。在我的情況下,我希望緩存的條目不會被刪除,除非它到期,以防止緩存在其到達之前在重負載下進行清理。 –

回答

5

所以根據this「NotRemovable」防止被自動刪除,但是當它失效或手動取出緩存將被刪除(當緩存用完空間等)的高速緩存條目。

NotRemovable與此優先級別的緩存項將不會自動從緩存在服務器釋放系統內存中刪除。但是,根據商品的絕對或滑動到期時間,具有此優先級的商品會與其他商品一​​起被刪除。

+0

你的回答指的是'System.Web.Caching.CacheItemPriority',而不是'System.Runtime.Caching.CacheItemPriority'這是在問題中提出的。請編輯或刪除您的答案 - 這是非常具有誤導性的。 (當我找到你的答案時,我正在查看MSDN,這是我注意到的唯一原因)。 – xxbbcc