2009-04-24 63 views
1

我有一個應用程序顯示圖像縮略圖的屏幕,每個圖像大約80k,它們存儲在數據庫中。爲了保持合理的響應時間,應用程序會在第一次啓動時顯示一個佔位符圖像,然後從服務器下載圖像。我期望在屏幕上一次顯示大約40張圖像,這是我的批量大小。向客戶提供這些圖像的最佳方式是什麼?我有兩個選擇。將圖像傳輸到Silverlight客戶端的最有效方式

  1. 創建一個將Images數據庫表暴露給客戶端的ADO.NET數據服務。客戶端可以一次一個地異步請求圖像,並在它們從服務器返回時顯示它們。我已經實現了這個解決方案,它似乎工作正常;速度不是很好,我覺得我可以通過一次請求3張圖像來更好地利用Http管道。

  2. 在服務器上創建一個HttpModule,查找類似/Images/1.jpg的請求,然後讀取數據庫並返回請求的數據。在客戶端,我可以有許多Image對象的源指向服務器上的虛擬Url。我的理論是,通過只給Silverlight中的網址來對付它也許能夠更有效地傳輸圖像比我的代碼選項1

要麼這些方法更有效,還是有另一種技術爲了完成這項工作?謝謝!

回答

2

我不知道它是否更有效率,但我使用HTTP Handler(ashx)完成了非常類似的任務。處理程序根據uri中的參數(圖像ID)從數據庫中提取圖像,然後Silverlight通過將Image控件的Source屬性設置爲具有我想要的特定ID的處理程序的URI來異步獲取它們查詢字符串。 Image控件又是一個ItemsControl的內部,它允許我顯示多個圖像。

0

我們正在做一些非常相似的事情,我們只是使用ASPX頁面來爲它們提供圖像標識符的查詢參數。我們還緩存圖像,如果存在,ASPX頁面將使用緩存的值。如果沒有,我們將它從數據存儲中提取出來,緩存起來併發送出去。它對我們非常有用。

+0

是否緩存涉及aspx頁面編寫一些代碼?這是如何運作的? – 2009-04-24 14:56:01

+0

我們做我們自己的緩存,但你可能會考慮某種緩存框架,如Velocity或MemCached – 2009-04-24 15:01:44

0

你看過使用Deep Zoom嗎?這對於逐行圖像加載非常有效,並且在圖像完全加載時爲您提供更好的用戶體驗。

例子:

相關問題