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.

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

С этой страницей будет установлено, что DataContext является MainViewModel.

Если вы хотите отображать элементы в сетке, вы можете изменить ItemPanelTemplate из списка ListBox как WrapPanel с Windows Phone Toolkit.

<ListBox.ItemsPanelTemplate> 
    <toolkit:WrapPanel /> 
</ListBox.ItemsPanelTemplate> 
Смежные вопросы