2011-07-10 16 views
1

當我有這樣的代碼,以檢測當某個控制器動作得到逐出:反正是有使用的輸出緩存屬性

[AcceptVerbs(HttpVerbs.Get)] 
    [OutputCache(Duration = 86400, VaryByParam = "*")] 
    public ActionResult GetData(MyParams myParams) 
    { 
     return GetDataEx(myParams); 
    } 

緩存一堆的JSON我的Web服務器上。

我看到on this page,它說

不保證這些內容將被緩存的時間,你指定的金額。當內存資源變低時,緩存開始自動驅逐內容

有沒有什麼辦法讓此項目時會從德高速緩存驅逐,因爲內存資源越來越低的特定回調。我沒有看到緩存正常工作,但我的猜測是我的內存不足,但如果我有這個回調,我可以肯定地說。

回答

1

隨着響應輸出緩存沒有辦法內容期滿時得到通知。說實話,你不應該在乎,如果內容已經過期,控制器的行爲將被簡單地擊中並且新的內容被再次緩存。還要注意,這取決於你這個配置輸出緩存的位置被存儲到,如果它在中間代理服務器或客戶端瀏覽器的下游,緩存過期是完全失控的。

如果您手動將對象緩存到ASP.NET緩存中,則可以註冊一個CacheItemRemovedCallback,該項將在項目被刪除時執行,但這不適用於您在此處使用的響應輸出緩存。

+0

我同意我不應該關心,但我只是想檢測這個,看看事情會越來越被驅逐,看看是否我需要在包裝盒上更多的內存。我想我可以改變它把它在asp.net緩存explicitally(而不是使用屬性) – leora

+0

@ooo,這就是它之所以好主意,有用於緩存一個單獨的盒子。不使用Web服務器。最好的辦法是使用分佈式緩存。 –