none
Ошибка OutOfMemoryException при работе цикла (c#, wpf) RRS feed

  • Вопрос

  • Здравствуйте.

    Есть цикл, который выполняет работу над изображением:

    for (int index = 0; index < imageList.Items.Count; index++)
    {
    	using (System.Drawing.Image inputImage = System.Drawing.Image.FromFile((imageList.Items[index] as ItemClass).Path))
    	{
    		ScaleDownImage(inputImage, Convert.ToInt32(tbWidth.Text), Convert.ToInt32(tbHeight.Text)).Save(
    				tbOutFolder.Text + System.IO.Path.DirectorySeparatorChar + index.ToString() + ext,
    				imageFormat
    				);
    	}
    	Dispatcher.Invoke(updatePbDelegate, System.Windows.Threading.DispatcherPriority.Background, new object[] { ProgressBar.ValueProperty, progress.Value += 1 });
    	}
    }

    Все выполняется в одном главном потоке. Все файлы из списка обрабатываются поочередно.

    Как вылечить постоянно вылетающую ошибку о нехватке памяти?

    28 сентября 2014 г. 6:25

Ответы

  • При большом количестве.

    В списке больше 1700 файлов разных размеров, но стабильно после 36 файла выскакивает ошибка.

    Пробовал делать и x86 и x64.


    Как вариант проверьте этот 37 файл (название на наличие всяких лишних символов и может с типом что-то не так)
    • Помечено в качестве ответа Hovanskiy 30 сентября 2014 г. 11:54
    29 сентября 2014 г. 5:56

Все ответы

  • Добрый день.

    Эта проблема возникает всегда? Или только при большом количестве файлов? Или только при большом размере файлов?

    28 сентября 2014 г. 6:44
    Отвечающий
  • При большом количестве.

    В списке больше 1700 файлов разных размеров, но стабильно после 36 файла выскакивает ошибка.

    Пробовал делать и x86 и x64.

    28 сентября 2014 г. 7:32
  • При большом количестве.

    В списке больше 1700 файлов разных размеров, но стабильно после 36 файла выскакивает ошибка.

    Пробовал делать и x86 и x64.


    Как вариант проверьте этот 37 файл (название на наличие всяких лишних символов и может с типом что-то не так)
    • Помечено в качестве ответа Hovanskiy 30 сентября 2014 г. 11:54
    29 сентября 2014 г. 5:56
  • А если так:

    using (System.Drawing.Image inputImage = System.Drawing.Image.FromFile((imageList.Items[index] as ItemClass).Path))
    using (var tempImage = ScaleDownImage(inputImage, Convert.ToInt32(tbWidth.Text), Convert.ToInt32(tbHeight.Text)))
    {
        tempImage.Save(tbOutFolder.Text + System.IO.Path.DirectorySeparatorChar + index.ToString() + ext,
                imageFormat);
    }

    29 сентября 2014 г. 10:12
  • Действительно ошибка именно в файлах!

    Сам виноват, не доглядел! ))

    Забыл указать форматы файлов и в список попали еще и видео ))

    Теперь все работает как надо!

    30 сентября 2014 г. 11:54