2012-03-02 83 views
1

我有一個.NET MVC應用程序,我需要用一些文本顯示圖像列表。圖像和文本存儲在同一個表中的數據庫中,並以簡單模型返回。我沒有想到的是如何顯示所有這些圖像,而無需再次爲每個圖像點擊數據庫。ASP.NET MVC顯示來自數據庫的多個圖像。如何 - 高效

我看幾個例子,如:

等人,但他們都回去於數據庫的每個圖像。這是沒有道理的,因爲可能有數十個圖像,並且我不想在模型中返回圖像數據時繼續對數據庫進行單一調用。我是新來的ASP.NET MVC,(也從來沒有處理存儲在數據庫中的圖像),我想我只是想念一些東西,而且它不能這麼難。如果有人解決了這個問題,我很樂意聽到它,而且我認爲其他人也會這樣做,根據其他問題已經在這裏。

+1

始終是圖像顯示的所有如果是這樣,然後打一個電話,並通過集合中的一個集合,然後循環轉儲結果顯示在網頁上? 。 – Brian 2012-03-02 15:41:44

回答

4

只需點擊數據庫多次。我曾經認爲將圖像與緩存中的文本一起加載,然後在緩存服務時使緩存無效,這是一個聰明的想法。我還必須生成隨機URL以避免不同的用戶使每個其他緩存失效。我認爲減少數據庫查詢的數量非常巧妙。

我現在對這個「聰明」感到羞愧,我不告訴任何人。除非您有實際的性能問題,否則不要考慮它。

通過設置適當的頭文件來實現客戶端緩存很重要。圖像在客戶端上比在服務器上更好地緩存,因爲即使您在服務器上緩存,如果您不在客戶端上緩存,仍然會使網絡傳輸命中。

也通過主鍵擊中數據庫(我認爲這是你如何去檢索圖像)不是一個昂貴的操作,除非圖像是2MB +我不擔心從數據庫傳輸到Web服務器。

編輯:我只是告訴大家我的恥辱:(

+2

+1是爲您的可恥錄取:) – 2012-03-02 15:58:10

+0

聰明的人從他們的錯誤中學習。聰明的人從別人的錯誤中學習。明智點吧! – Stilgar 2012-03-02 16:00:48

+0

良好的判斷來自經驗,而經驗來自糟糕的判斷 - 觸動!!週末愉快!! – 2012-03-02 16:04:09

2

您可以獲取存儲在共享容器中的檢索圖像緩存(如Application)。

當用戶請求包含圖像的視圖時,您可以檢索它們並將其存儲在緩存中。 然後來請求圖像,你可以直接從內存中檢索它們,而不會觸擊數據庫。

確切的實現取決於您的特定場景,您可以限制緩存中存儲的圖像數量,使緩存在一段時間後自動丟棄數據,甚至使用其他服務器容器(例如Session)。

無論如何 - 之前檢索到的返回數據總是涉及服務器端的某種緩存,並且不應特別難於實現。

0

我建議看看ASP.NET緩存。您可以從數據庫中提取一次圖像,並將其保存在緩存中。隨後的請求將從緩存中獲取它們,直到它到期。

+0

根據負載分佈和項目數量的不同,這可能會導致高速緩存污染,從而導致緩存對其他任何內容都變得更慢,並且會佔用大量RAM。當然,如果許多用戶請求的圖像很少,是一個很好的解決方案,但如果有少量用戶需要大量圖片,它將會失敗。 – Stilgar 2012-03-02 15:57:31

相關問題