System.Drawing.dll中发生未处理的"System.OutOfMemoryException"类型异常附加信息:内存不足

Bas*_*sco 5 c# clone bitmap winforms

我有一个列表"图像",其中包含约20张照片,每张约1MB.我想通过单击下一个按钮滚动列表中的图像.但在大约8张照片后,我记忆犹新.

    private void button4_Click(object sender, EventArgs e) //next
    {
        index++;
        if (index >= images.Count) index = 0;
        CurrImage = images[index]; 
        Bitmap b = new Bitmap((Bitmap)CurrImage.Clone()); //breakpoint occurs her
        pictureBox1.Image = b; 

        NewThread = new Thread(new ThreadStart(ChooseColors2));
    }
Run Code Online (Sandbox Code Playgroud)

ChooseColors2线程将使用"CurrImage"以避免竞争条件,我通过创建一个新的位图避免了这一点,如上所示

请注意,如果我使用pictureBox1.Image = CurrImage; 没有创建一个新的位图我没有得到这个错误,但线程将有竞争条件异常.

Gra*_*ICA 4

您可以在将新位图分配给 之前尝试调用以下命令pictureBox1.Image,以删除以前的“新”位图并释放资源:

pictureBox1.Image.Dispose();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢格兰特,我想我需要阅读更多有关内存泄漏的内容。每当我想到我已经成为一名程序员时,我就会意识到我还很遥远。不管怎样,谢谢你的帮助。 (3认同)