C#:在调用Bitmap.save()之后Dispose()一个Bitmap对象?

时间:2013-08-08 06:56:57

标签: c# bitmap dispose

我有这个:

Bitmap bmp = new Bitmap(image);
//image processing
bmp.Save(path + fileName);

我想知道是否需要在此代码后调用bmp.Dispose()。 提前谢谢。

5 个答案:

答案 0 :(得分:6)

更好的是,您可以将bmp包装在一个使用区块中,这将为您处理

using(var bmp = new Bitmap(image))
{
    bmp.Save(...);
}

Save的唯一目的是将图像保存到指定文件,它不会更改位图对象

答案 1 :(得分:5)

有一条简单的规则:如果你创建了一个一次性实例并且还没有将它传递给另一个orower,你应该处理它。在你的代码中;既然你已经创建了 Bitmap,你也应该处理它:

using (Bitmap bmp = new Bitmap(image)) { // <- Creation
  // Image processing
  ...
  bmp.Save(path + fileName);
} // <- You no longer need the bitmap, let's dispose it

答案 2 :(得分:4)

我会使用using阻止和Path.Combine

using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(Path.Combine(path ,fileName));
}

答案 3 :(得分:3)

如果你已经完成了:是的。仅仅基于

的事实
  • 它实现了IDisposable
  • 你已经完成了它

说实话,这两点基本上是整个辩论 - 其他一切都是实施细节。虽然在这种情况下,实现细节可能是GDI +句柄,这绝对值得清理。但是您可以使用using

让您的生活更轻松
using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(path + fileName);
}

答案 4 :(得分:2)

是的,您需要调用Dispose()方法,否则在垃圾收集器调用终结器方法之前正在使用位图资源。 只需使用using运算符:

using(var bmp = new Bitmap(image))

    {
        // image processing
        bmp.Save(path + fileName);
    }