顯示大量的圖像時,我正在經歷一些性能問題,我發現這個問題是,當我真的只需要一個比尺寸的1/4的圖像較少被使用的全分辨率圖像。因此,我在BeginInit和EndInit之間添加了一行,將DecodePixelWidth設置爲200,這是我在佈局中需要的最大寬度。我的表現不再是問題,但一些圖像非常小,絕對沒有接近200像素寬。大部分圖像似乎都能正確顯示,而且似乎沒有任何韻律或原因,哪些太小而哪些正常工作。我認爲這可能是由於圖像原始尺寸的差異,但結果沒有任何模式。我嘗試將寬度增加到600,然後允許違規圖像以200的正確寬度顯示,但是性能受到影響。的BitmapImage DecodePixelWidth古怪行爲
在這一點上,我甚至不知道從哪裏開始尋找,並會在正確的方向踢真的很感激。
編輯:低於圖像,以及如何我使用它們的更多信息。
大部分圖片都是圍繞1000X1500一些雖然奇數維像1000x1513。所有的圖像都是JPEG。目前,每個圖像都放置在我設計的自定義用戶控件中,沒有什麼太花哨只是用一些文字圍繞它的背景。然後將每個用戶控件放置在其自己的行/列中的網格中。網格位於滾動查看器中,因此用戶可以滾動瀏覽列表。這可能不是完成我所尋找的最好的方式,但它是我很快就想出來的,並且它在很大程度上起作用。如果能以更簡單或更簡潔的方式完成我想要的功能,我很樂意切換到另一種顯示方式。
預期的結果是電影瀏覽應用程序。將會有一個可滾動的電影列表,每個電影都以其自己的瓷磚表示,並標題,電影海報,流派信息,評級和說明。該列表可以在各種項目上排序。關於電影的信息存儲在另一臺機器上的sql數據庫中。這些圖像最初存儲在另一臺機器上,但本地複製以提高性能。
編輯:我已經能夠通過不使用DecodePixelWidth,並在需要的大小,而不是保存圖像的副本來解決問題,這提高了性能。 Youngjae建議不使用DecodePixelWidth以及他提到的使用虛擬化列表時,向我提供了以下關於創建虛擬化包裝面板的文章,這些文章應解決任何其他性能問題。這篇文章是針對silverlight的,但是從我所瞭解的silverlight基本上來說是一個wpf的淡化版本,如果它在Silverlight中工作,它應該可以在wpf中工作。將它轉換爲我的用途應該不會太困難。
我不確定當你說'使用虛擬化列表'時你指的是什麼。我的圖像寬度設置爲200,並將拉伸模式設置爲「均勻」。我已經在上面編輯了我的帖子,詳細介紹了我正在做的事情以及關於我正在使用的圖像的更多信息。謝謝你的幫助。 – OriginalMoose
我將繼續並將您的答案標記爲正確答案。您的回答引導我通過Google找到我在上面的問題中添加的一組文章。第四篇文章討論創建一個虛擬化包裝面板。通過一些修改,它應該可以很好地適用於我的項目。謝謝你的幫助。 – OriginalMoose