2010-01-14 195 views
2

我構建了一個從磁盤讀取文件的圖像庫,隨時創建縮略圖並將其呈現給用戶。這很好,除了處理需要一點時間。.NET應用程序高速緩存vs數據庫高速緩存

然後我決定使用ASP .NET應用程序緩存來緩存處理後的圖像。處理圖像時,我將byte []流添加到緩存中。據我所知,這是beeing保存到系統內存。這是工作完美的,頁面的加載速度更快。

我的問題是,如果有數以千計的圖像緩存在應用程序緩存中,會以任何方式影響服務器性能?

還有其他更好的方法來做這個圖像緩存嗎?

+2

問題的數據庫緩存部分是什麼? – 2010-01-14 14:07:32

+0

我想也許將它存儲在數據庫而不是應用程序緩存中效率更高。只是我想在組合中添加一個想法。 – Martin 2010-01-14 14:18:20

回答

5

默認情況下Application Cache將數據存儲在服務器內存上;取決於你的網站導航模式,也許你沒有得到太多的緩存命中。

您可以預處理所有圖像以一次生成縮略圖並將其與原始圖像一起存儲。這樣你就不需要處理該緩存層,並且可能不會佔用太多的磁盤空間。

+0

我認爲這應該是一個評論,而不是一個實際的答案。 – Tobias 2010-01-14 14:05:58

+0

當然,在圖像加載時創建縮略圖。這比不斷創建縮略圖的密集程度要低得多,如果它們進行了正確優化,則不會佔用大量空間。 – cjk 2010-01-14 14:06:18

+0

+1來創建縮略圖。磁盤空間相對便宜,縮略圖的性質很小。 @Tobias - 爲什麼?這是一個很好的答案! – AdaTheDev 2010-01-14 14:11:37

1

這取決於您擁有多少圖片以及服務器上的內存。我的首選是將縮略圖寫入磁盤,而不是將它們放在內存緩存中。您大概會從支持RAID的磁盤上運行該站點,因此讀取速度將會很快,而且IIS將針對磁盤讀取進行優化。

0

是的,你肯定會通過在緩存中放置太多東西來影響Web服務器的性能。

將緩存添加到ASP.Net的一個原因是添加了從緩存中清除最舊/最少使用項的功能,如果服務器內存開始變得最大化。如果將項目緩存在Application對象中,則不會進行清理,並且服務器最終可能會耗盡內存。使用Cache對象可以幫助你避免這種情況。

Cache對象還允許您設置有關到期的各種規則。因此,舉例來說,您可能會將這些圖像保留在緩存中的時間限制爲多少。