2012-05-02 88 views
1

我正在設計一個具有超過90個項目的ListPicker的應用程序。 每個項目包含2個PNG圖像(每個尺寸爲< 3KB)和一些文本。減少Windows Phone應用程序中的內存使用量

我創建了一個新的類來表示我的項目,使用

List<ClassName> ClassNameList = new List<ClassName>(); 

代碼和附加項目使用列表中,我創建這個類的一個列表:

ClassNameList.Add(new ClassName() {var1=..., var2=...}); 

在我情況下,var1和var2是項目中包含的PNG圖像的路徑。

然後,我使用<itemtemplate>中的數據綁定將我的項目綁定到列表。

當我在模擬器中加載ListPicker時,內存使用量超過256MB。 所以,我不能提交我的應用程序更新,256MB的RAM手機。 有什麼辦法可以減少內存使用量嗎?

+0

嘗試將所有圖像存儲在獨立存儲中,並在用戶進入視圖並刪除較舊的項目時從存儲中加載項目 –

+0

請您詳細說明一下嗎?特別是你說我應該「刪除舊的項目」的部分。 – tumchaaditya

+0

您正在將圖像添加到列表查找器。例如,如果你滾動到字母H,然後加載H和G的項目,我刪除所有其他字母項目很多例子是否有類似於在列表框中的延遲加載,但在這裏你是刪除頂部的項目,當用戶達到具體點。 –

回答

1

圖像文件大小並不意味着它會使用相同數量的內存;通常圖像採用壓縮格式(PNG格式),文件大小減小。然而,這並不意味着它將使用更少的內存。也讀this topic(雖然它是關於WPF,它仍然是任何情況下相同的原則)。

我不知道你的情況,但是如果你有很多相同的圖片,你可能想考慮緩存你的圖像(或使用例如proxy pattern)來減少內存中的重複圖像。

+0

我看了這個話題。但我想加載的圖像已經小於60x60像素。所以,我沒有看到進一步使用DecodedPixelWidth – tumchaaditya

+0

的任何一點您還可以嘗試以下MSDN上的提示和技巧:http://msdn.microsoft.com/en-us/library/cc716879.aspx此外,也許你應該看看延遲加載,所以你不會加載所有的圖像(你也可以「處理」不在顯示的項目附近的圖像)。 – Styxxy