还有什么我可以使用而不是新的位图(占用太多RAM)

时间:2016-12-16 19:30:38

标签: c# forms bitmap

所以我得到了我建的这个程序。有一些代码

        private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog openDialog = new OpenFileDialog();
        if (openDialog.ShowDialog() == DialogResult.OK)
        {
            image1 = new Bitmap(openDialog.FileName);
            pictureBox1.Image = image1;
        }
    }

现在,每当我用按钮更改图片时,ram的使用量就会增加。 我的一个朋友告诉我发生了这件事,因为每次我这样做的时候我都会分配新的记忆空间:&/ p>

new Bitmap(openDialog.Filename);

解决方案是什么? (我试图在谷歌搜索,但我真的不知道该搜索什么...)

编辑:

现在正在努力寻求帮助。 为他人编辑的代码:

        private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog openDialog = new OpenFileDialog();
    if (openDialog.ShowDialog() == DialogResult.OK)
    {
     if (pictureBox1.Image != null)
         pictureBox1.Image.Dispose();

        image1 = new Bitmap(openDialog.FileName);
        pictureBox1.Image = image1;
    }
}

1 个答案:

答案 0 :(得分:1)

  

注意:在释放对图像的最后一个引用之前,请始终调用Dispose。否则,在垃圾收集器调用Image对象的Finalize方法之前,不会释放它正在使用的资源。

正如MSDN文档所述,您必须致电Dispose。如果您想从图像中提取某些内容然后进行处理,最好使用Using关键字; e.g

using(var bmp = new Bitmap(bitmapLocation)){
    // extract data from bitmap
}

执行后离开using大括号,将调用位图的Dispose方法并处理对象。