2009-08-07 109 views
2

我第一次真正進入.NET緩存,所以想要運行你的幾個場景。ASP.NET對象緩存 - 多少太多?

問題1:許多昂貴的對象 我有一些小物件(簡單INT /字符串屬性),這些實例相當昂貴。這些是每個用戶可能有1 - 10個用戶統計對象。與這些傢伙一起填充緩存是好的還是不好的做法?

問題2:很少有便宜的定期使用的對象 也得到了其用在每一個頁面加載多次幾個對象(再小)。設計的緩存是否經常訪問?

Fanks!

stackoverflow:開裂問題建議工具btw。

回答

1

1)我會緩存它們。如果您擔心緩存「填滿」,您可以隨時設置CacheItemPriority.Low

2)是緩存設計爲定期訪問。它可以導致巨大的性能改進。

1

對這兩個問題的答案是如果可以的話,積極緩存它們。

在應用程序的整個生命中實例化但相對靜態(即不變)的對象應該被緩存。如果您可以通過這樣做來提高性能,那麼即使相對便宜的對象也應該被緩存。

當這些對象中的任何一個變爲陳舊或過時時,如果您需要使緩存失效,您可能會發現自己遇到問題。緩存失效可能是一個難題,尤其是在多服務器環境中。

1

我不認爲是打緩存過於頻繁任何問題......

總體asp.net緩存是決定什麼保持和一般管理的空間相當智能INT條款。雖然我不會依賴緩存來存儲信息,但只能用它來替代磁盤或數據庫。會話狀態可以更好地服務用戶對象。

http://aspnet.4guysfromrolla.com/articles/100902-1.aspx 是一篇很好的文章,解釋.net緩存的內置功能。

1

讓我們來解釋標題中的問題 - 緩存過多時。

如果您在緩存中放置太多東西以至於推開其他東西,這太多了。如果服務器上的網站總共使用的內存多於物理內存,則它們將互相推送到存儲在磁盤上的虛擬內存中。這實際上意味着你在磁盤上而不是在內存中緩存了一些對象,這會慢很多。

如果您在緩存中放置如此​​多的對象以至於它們互相推送出去,那麼很難在緩存消失之前使用緩存中的任何對象。

因此,通常情況下,您可以在達到極限之前對其進行緩存,而無需在緩存中添加任何內容。

當確定什麼是最好的緩存時,考慮瓶頸在哪裏。例如,如果您的數據庫服務器的容量遠大於Web服務器,則緩存數據庫結果不會節省太多資源。從數據庫中獲取數據需要時間,但在等待數據庫時不會佔用大量資源,所以不會影響吞吐量。