C#: 在调用Bitmap.save()方法后,是否需要使用Dispose()释放Bitmap对象?

4

我有这个:

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

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

提前感谢您。

5个回答

6
我会使用 using 块和 Path.Combine
using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(Path.Combine(path ,fileName));
}

1
在类似这种情况下,最好使用以下方式连接路径。https://dev59.com/7HNA5IYBdhLWcg3wcNXF - Damith

6

是的。

更好的做法是,你可以将bmp放在using块中,这样就会自动处理它的释放。

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

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


4

有一个简单的规则:如果您已经创建了一个一次性实例并没有传递给另一个所有者,那么您应该将其销毁。在您的代码中;由于您已经创建了 Bitmap,因此您也应该将其 dispose

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

2
如果你已经完成了它:是的。仅仅基于以下两个事实:
  • 它实现了IDisposable,并且
  • 你已经完成了它
老实说,这两点就是整个讨论的实质 - 其他所有内容都是实现细节。虽然在这种情况下,实现细节可能是 GDI+ 句柄,这些句柄绝对值得妥善清理。但你可以通过使用 using 来使生活变得更加轻松:
using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(path + fileName);
}

2

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

using(var bmp = new Bitmap(image))

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接