Здравствуйте, такая проблемма
вот код
foreach(string file in files) { using( Image img = Image.FromFile( file)) // <--- вот тут вот вылетает исключение Out of Memory { Area = img.Width * img.height; } }
файлов много но они мелкие, но во время вылета исключения приложение занимает в памяти 30мб
в чем может быть дело?
Я не слишком большой знаток C# но помнится одно время в шарпе была проблема с foreach она ОЧЕНЬ плохо работала с памятью
Вероятно память не до конца очищяеться, и отсюда проблемы с Out of Memory. Попробуйте вручную вызывать GC.Collect
smbdie
> в чем может быть дело?
Может, один из файлов вовсе не картинка, и падает потому, что Image пытается выделить кусок памяти, исходя из мусорных аргументов (отрицательние или огромные размеры).
Я думаю RPGman прав, посмотри где и как у тебя определяется структура files, возможно там ошибка и одна из строк file передается неправильно.
RPGman
+1
Это может быть какой-нибудь скрытый Thumbs.db.
foreach(string file in files)
{
try
{
using(Image img = Image.FromFile(file)) // <--- вот тут вот вылетает исключение Out of Memory
{
Area = img.Width * img.height;
}
}
catch(Exception e)
{
Console.WriteLine("Error on file {0} - {1}",file,e);
// или Log.Write(...)
// или ShowMessageBox(...)
// или брейк
}
}и зафик гадать на кофейной гуще?
MSDN: http://msdn.microsoft.com/en-us/library/stf701f5.aspx
>Image.FromFile Method (String)
>OutOfMemoryException:
>The file does not have a valid image format.
>-or-
>GDI+ does not support the pixel format of the file.
т.е. это тупо не поддерживаемая картинка, если картинка вообще
rAmpArk
Спасибо, да просто битая картинка.
Спасибо всем, просто странно что OutOfMemory, я думал может я как то не освобождаю хендл загружаемого файла или еще что...
а тут всё банально )
туплю одним словом.
rAmpArk
> >OutOfMemoryException:
> > he file does not have a valid image format.
> >-or-
> > DI+ does not support the pixel format of the file.
Отличная же диагностика!
Тема в архиве.