System.Drawing.dll 中发生了类型为“System.OutOfMemoryException”的未处理异
本文关键字:System OutOfMemoryException 未处理 Drawing dll 发生了 类型 | 更新日期: 2023-09-27 18:30:33
我正在尝试遍历我加载的所有图像,我能够处理多达 40 张图像,然后我得到内存不足错误,尽管我正在处理变量 tempImage。代码在"位图临时图像 = 新位图(文件名);"行处中断,请帮忙!有没有办法处理大量输入文件?喜欢批处理并将过程拆分为块?由于操作将持续一分钟以上才能完成,因此程序将在那时崩溃。
foreach (string fileName in openFileDialog.FileNames)
{
circleDetection examDetect = new circleDetection();
Bitmap tempImage = new Bitmap(fileName);
directory.Text = fileName;
PictureBox picBox = new PictureBox();
picBox.Width = 200;
picBox.Height = 200;
picBox.Location = new System.Drawing.Point(picBoard.Controls.Count * (picBox.Width + 5) + 5, 5);
picBox.SizeMode = PictureBoxSizeMode.Zoom;
picBox.BorderStyle = BorderStyle.FixedSingle;
examDetect.ProcessImage(tempImage);
picBox.Image = examDetect.getImage();
Console.WriteLine(i++);
student.Add(compare(examDetect));
picBoard.Controls.Add(picBox);
tempImage.Dispose();
}
我更喜欢使用using()
而不是.Dispose()
。它还在循环结束后释放对象。所以也许你应该像接下来一样尝试一下?
foreach (string fileName in openFileDialog.FileNames)
{
circleDetection examDetect = new circleDetection();
using (Bitmap tempImage = new Bitmap(fileName))
{
Exam.Add(tempImage);
directory.Text = fileName;
PictureBox picBox = new PictureBox();
picBox.Width = 200;
picBox.Height = 200;
picBox.Location = new System.Drawing.Point(picBoard.Controls.Count * (picBox.Width + 5) + 5, 5);
picBox.SizeMode = PictureBoxSizeMode.Zoom;
picBox.BorderStyle = BorderStyle.FixedSingle;
examDetect.ProcessImage(tempImage);
picBox.Image = examDetect.getImage();
Console.WriteLine(i++);
student.Add(compare(examDetect));
picBoard.Controls.Add(picBox);
}
}
有关using
语句的详细信息,请参阅 MSDN。
更新:但是,为什么不使用流来加载文件?在这种情况下,建议使用流。