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();
}

System.Drawing.dll 中发生了类型为“System.OutOfMemoryException”的未处理异

我更喜欢使用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。

更新:但是,为什么不使用流来加载文件?在这种情况下,建议使用流。