2011-12-29 65 views
6

我試着去了解ASP.NET中的緩存,但仍然有幾個問題。C#中的緩存是否適合我?

  1. 當使用SQL緩存依賴......我知道,你可以指定哪些表進行監控,但如果發生變更這些表中的任何一個它重置整個緩存?我知道我不希望緩存經常發生變化的表,但我們最終可能會得到一些緩存表,即使每個表每天只能獲得一些更新,也可能會變成50個緩存的重置每日(8小時窗口)。

  2. 我將通過GAC DLL創建和維護此緩存。大量不同的應用程序將同時訪問該GAC。每個應用程序是否保留自己的緩存副本,還是隻保存在一個全局位置(或可能每個應用程序池)?

  3. 服務器上有物理位置,我可以看到緩存當前消耗了多少空間?如果每個應用程序都保留自己的緩存,這可能會非常貼切,因爲這可能會佔用大量的磁盤空間。

  4. 有沒有某種方法來物理強制緩存重建自己?我可以看到我的老闆認爲高速緩存對於特定問題存在錯誤,我需要能夠在最高級別排除這一問題。無「更改記錄,並說應該重建緩存」,而是「做[動作X],知道,無論是在高速緩存中現在沒有了」

預先感謝您的回答和時間。

+0

您提出了一些有趣的問題,但我不太清楚它與您的問題的標題之間的關係。 – 2011-12-29 22:37:17

+0

和c#標記.. – 2011-12-29 22:39:05

+0

2害怕我.... – Phill 2011-12-29 22:41:19

回答

2
  1. 的SqlCacheDependency僅監視在舊式SQL 2000的方法,它依賴於觸發器和輪詢表。 SQL 2005+方法監視行級別的更改,並使用Service Broker。在Cache對象級別,更改將使與給定的SqlCacheDependency(而不是整個緩存)關聯的Cache條目無效。

  2. 每個應用程序都有一個單獨的緩存副本。如果你有很多應用程序共享相同的數據,你可能會考慮創建一個單獨的「緩存服務器」,並讓你的應用程序使用WCF從那裏獲取他們的數據 - 基本上爲你的應用程序添加另一層。

  3. 你可以看看幾個與緩存相關的性能計數器,但是如果你關心的是磁盤空間,那麼沒有什麼可擔心的,因爲ASP.NET緩存完全存儲在RAM中。另外,如果RAM變得太滿,緩存的一個特點是它會放棄舊的/不經常引用的對象,爲新對象騰出空間。

  4. 強制高速緩存被刪除的最簡單方法是簡單地回收應用程序或AppPool(默認情況下每天默認一次)。如果你想要更有針對性的東西,你需要編寫一些代碼來強制刪除緩存中的某些項目,或者使用Cache.Remove()或者使用鏈接的依賴項。

1

從我的頭頂:

  1. 只有表的內容將失效。
  2. 每個Web應用程序都有自己的緩存。
  3. 緩存存儲在內存中。看到這個問題How to determine total size of ASP.Net cache?關於緩存大小
  4. http://bit.ly/vsqNDl這可能會幫助
+0

如果表中有外鍵,它是否也會使這些表的緩存無效?我沒有使用Sql Cache依賴關係,所以我對此感到好奇,如果沒有,我可以看到新項目的一些用途。 – Brian 2011-12-29 22:47:24