2010-07-13 107 views
4

我試圖緩存用戶控件,並在一些頁面上緩存單個對象。有多種方式來實現緩存,而我的頭正在突破它。以編程方式緩存用戶控件並清除緩存

我現在看到的緩存選項的方式:

你必須被設置爲高速緩存30分鐘控制了PartialCaching選項,它會清除自身後......你有VaryByParam時,以身份頁通過查詢字符串參數或其他不同的選項

但我只是無法找到一種合適的方式來添加緩存到控件,並能夠清除緩存編程方式,當我更新控件中使用的對象之一後端。

你可以做HttpContext.Current.Cache.Insert(),它接受一個關鍵字,以後你可以通過使用remove來銷燬高速緩存項...這可以將對象保存在緩存中,但是你可以使用諸如varyByParam之類的選項嗎?

我的問題是燒燬兩個:

  1. 有沒有辦法從代碼清除特定的用戶控件緩存?如果是的話,這可以根據不同的選項來完成嗎?
  2. 對象緩存如何使用Insert()對登錄的用戶或匿名用戶做出響應?

編輯: 我緩存多個東西....而且我真的大吃一驚,在選擇緩存時做出選擇。 Cache.Insert可以通過參數改變嗎?

主要問題是人們從後端編輯東西,需要觸發一個事件來重新實例化或清除引用該對象的所有緩存項目。

+0

什麼是你緩存?看起來你正在做某種數據緩存,這與頁面緩存(這是varyByParam的東西)有很大不同。 – CodingGorilla 2010-07-13 15:31:46

回答

2

使用System.Web.Caching.Cache類可以緩存項目併爲緩存中的項目創建依賴項。如果您使用的是SQL Server,那麼您可以使用SqlCacheDependency類來根據數據庫清除緩存中的項目。

否則,您可以創建您自己的CacheDependency類的衍生產品,您可以使用它來完成同樣的事情。我發現這個描述這樣做的post

+0

我使用sqlcachedependancy。它真的很整潔,我的頁面仍然無限期地被緩存,直到我指定了一個表格的變化。 – 2011-09-08 15:51:29

3

您可以使用以下方法從輸出緩存中移除項目。

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx"); 

現在,這只是讓你的一部分,你正在尋找。這將刪除該特定頁面的所有緩存條目。 MSDN文檔證實了這種行爲。

至於你的其他問題Cache.Insert()是跨應用程序的單個緩存存儲,不考慮用戶身份。

現在我還將更加關注你在做什麼,它可能是有道理的,只緩存實際數據,然後你可以添加/刪除特定項目。但是,如果您的.control確實需要大量的CPU等來處理顯示,那麼輸出緩存的想法就可以工作。