4

我有这个:

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

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

4

5 回答 5

6

是的。

更好的是,您可以将 bmp 包装在 using 块中,这将为您处理

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

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

于 2013-08-08T06:59:11.857 回答
6

我会使用using块和Path.Combine

using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(Path.Combine(path ,fileName));
}
于 2013-08-08T07:02:56.713 回答
4

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

using (Bitmap bmp = new Bitmap(image)) { // <- Creation
  // Image processing
  ...
  bmp.Save(path + fileName);
} // <- You no longer need the bitmap, let's dispose it
于 2013-08-08T07:02:39.647 回答
2

如果你完成了它:是的。仅仅基于这样一个事实

  • 它实现了IDisposable,并且
  • 你已经完成了

老实说,这两点基本上是整个辩论 - 其他一切都是实施细节。虽然在这种情况下,实现细节可能是 GDI+ 句柄,但绝对值得适当清理。但是您可以通过以下方式让您的生活更轻松using

using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(path + fileName);
}
于 2013-08-08T06:59:58.030 回答
2

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

using(var bmp = new Bitmap(image))

    {
        // image processing
        bmp.Save(path + fileName);
    }
于 2013-08-08T07:01:46.603 回答