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

我有这个:

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

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

我会使用block和Path.Combine

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

是。

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

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

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

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

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

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

  • 它实现了IDisposable ,和
  • 你完成了它

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

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

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

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