2015-04-23 4 views
0

Я пытаюсь developp приложения, чтобы взять и напечатать фотографии с Visual Studio 2013.Из памяти с BitmapImage

Приложения делит на 2 проекта:

  • Первого клиент, его возьмите 4 фотографии и отправьте их пути.

  • Второй сервер. Когда есть соединение, он показывает 4 фотографии. Тогда пользователь может выбрать рамку, количество и распечатать свои фотографии.

Существует проблема с загрузкой:

  BitmapImage _img1 = new BitmapImage(); 
      _img1.BeginInit(); 
      _img1.CacheOption = BitmapCacheOption.OnLoad; 
      _img1.UriSource = new Uri(_images[0]); 
      _img1.EndInit(); 
      img1.Source = _img1; 

      BitmapImage _img2 = new BitmapImage(); 
      _img2.BeginInit(); 
      _img2.CacheOption = BitmapCacheOption.OnLoad; 
      _img2.UriSource = new Uri(_images[1]); 
      _img2.EndInit(); 
      img2.Source = _img2; 

      BitmapImage _img3 = new BitmapImage(); 
      _img3.BeginInit(); 
      _img3.CacheOption = BitmapCacheOption.OnLoad; 
      _img3.UriSource = new Uri(_images[2]); 
      _img3.EndInit(); 
      img3.Source = _img3; 

      BitmapImage _img4 = new BitmapImage(); 
      _img4.BeginInit(); 
      _img3.CacheOption = BitmapCacheOption.OnLoad; 
      _img4.UriSource = new Uri(_images[3]); 
      _img4.EndInit(); 
      img4.Source = _img4; 

Я стараюсь с "BitmapCacheOption.OnDemand". При запуске программы потребление памяти составляет 3Go. Через несколько минут он увеличивается до 6Go.

Когда брошено OutOfMemoryException, речь идет о PresentationCore.dll

Я ищу OFR потребления, и в каждом цикле программы, увеличение Потребляемого от 0,4Go.

WIthout показать фотографии, приложение стабильно.

Я попытался с Bitmap и BitmapImage, GC.Collect и DeleteObject из gdi32.dll, проблема такая же.

Есть ли способ распорядиться всеми ресурсами?

Извините за мой английский

+1

Как часто вы создаете эти изображения? Вы активно их уничтожаете? – BrokenGlass

+0

Не уверен, что это влияет на вашу проблему, но в вашем коде в разделе '_img4' вы набрали' _img3.CacheOption = BitmapCacheOption.OnLoad; 'aswell – NLindbom

+0

Вы удаляете какие-либо из растровых изображений? В противном случае объем используемой памяти будет расти – TheLethalCoder

ответ

0

Вы кэшировать все растровое изображение в памяти - BitmapCacheOption.OnLoad. Попробуйте использовать None или OnDemand вместо OnLoad.