0

我加載了大量圖像,例如250+,並且出現了內存異常異常。在wp7中加載大量圖像時出現內存不足異常

我的代碼:

while (kount < imageItems.Count) 
{ 
    for (int i = 0; i < _grid.RowDefinitions.Count; i++) 
    { 
     BitmapImage bit=null; 
     for (int j = 0; j < _grid.ColumnDefinitions.Count; j++) 
     { 
      imgGrd = new Image(); 
      bit = new BitmapImage(new Uri(imageItems[kount].thumb_attachment, UriKind.RelativeOrAbsolute)); 
      imgGrd.Source = bit; 

      imgGrd.Stretch = Stretch.UniformToFill; 

      _grid.Children.Add(imgGrd); 
      Grid.SetRow(imgGrd, i); 
      Grid.SetColumn(imgGrd, j); 
      //bit = null; 
      //imgGrd.Source = null; 
      kount++; 
     }  
    } 
} 

如何克服這個問題。在此先感謝..

+0

增加內存的可能性嗎?如果沒有,則加載較少的圖像或較小的圖像文件... –

+0

如何在圖像從其獲取源時丟棄位圖對象。 –

回答

0

您不應該一次創建所有圖像。手機有辦法爲您創建和處理圖像。這是通過使用一些內置的ItemsControl控件完成的。其中最受歡迎的是ListBox。爲了讓ListBox創建並處理這些項目,您需要創建一個DataTemplate來創建圖像。

<ListBox ItemsSource="{Binding ImageItems}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding thumb_attachment}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

而不是通過你的ImageItems循環和手動創建圖像,你可以讓手機來照顧這一點。這要求您創建一個對象來將您的頁面綁定到具有ImageItems屬性的頁面。

public class MainViewModel // Should probably implement INotifyPropertyChanged 
{ 
    public IEnumerable<ImageItem> ImageItems { get; set; } 
} 

有了這個頁面,它將DataContext設置爲MainViewModel。

如果要顯示網格中的項目,則可以將ListBox的ItemsPanelTemplate更改爲Windows Phone Toolkit中的WrapPanel。

<ListBox.ItemsPanelTemplate> 
    <toolkit:WrapPanel /> 
</ListBox.ItemsPanelTemplate> 
相關問題