Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# System.OutOfMemoryException: "Выдано исключение типа "System.OutOfMemoryException"."

Сергей Власенко Ученик (60), открыт 2 недели назад
Здравствуйте! Пишу небольшую программу для работы с изображениями. Столкнулся с проблемой.
C# WinForms. listView.
Загружаю в listView изображения с директории. При старте программы все изображения загружаются. Обновляю список изображений (метод просто заново перезапускается) все в порядки. Но в 3 раз выдает исключение System.OutOfMemoryException: "Выдано исключение типа "System.OutOfMemoryException"." что может быть?


код:

private void Load_Images() // Метод загрузки изображений в программу
{
listView1.Items.Clear();

ImageList imageList = new ImageList();

imageList.ImageSize = new Size(100, 100);

string folderPath = @"C:\Users\AlexF\Documents\Electronic Arts\The Sims 4\Mods\Data\images";

foreach (string imagePath in Directory.GetFiles(folderPath))
{

try
{
using (FileStream stream = new FileStream(imagePath, FileMode.Open , FileAccess.Read ))
{

Image image = Image.FromStream(stream);

imageList.Images.Add(image);


}
}


catch (Exception)
{

MessageBox.Show("Ошибка загрузки изображений!");

}

}

listView1.LargeImageList = imageList;

listView1.View = View.LargeIcon;

for (int index = 0; index < imageList.Images.Count; index++)
{

ListViewItem item = new ListViewItem { ImageIndex = index };

listView1.Items.Add(item);

}

}
5 ответов
FreemanIsAlive Ученик (142) 2 недели назад
Из документации, это исключение вызывается огромным количеством ошибок. В этом случае, скорее всего, слишком большое количество изображений, и поэтому не получается копировать массив, так как среда CLR не может выделить достаточное количество памяти.
Редис Александрович Оракул (77510) 2 недели назад
Для начала было бы неплохо проверить, то что ты точно под x64 собираешь
Ну и попробывать так в файле app.config file
  




Лайт Ягами Искусственный Интеллект (283701) 2 недели назад
Не хватило памяти твоей программе. Может быть, за один раз решил захапать слишком большой блок.
Sergey V. Voronin Искусственный Интеллект (268587) 2 недели назад
А перед обновлением дестроить объект и создавать заново не стоит ли?
Jurijus ZaksasИскусственный Интеллект (426256) 2 недели назад
Сам список не надо.
А вот картинки в нем - таки да.
Jurijus Zaksas Искусственный Интеллект (426256) 2 недели назад
Класс Image реализует интерфейс IDisposable, что кагбэ намекает нам, что картиночки надо бы уничтожать вручную. А в твоем коде я что-то ничего такого не заметил.
Сергей ВласенкоУченик (60) 1 неделю назад
Нашел решение после Using вставить
GC.Collect();
GC.WaitForPendingFinalizers();
Jurijus Zaksas Искусственный Интеллект (426256) Абы помогло. Твой Using освобождает поток. А картиночки-то остаются все равно.
Похожие вопросы