【问题标题】:C#: Dispose() a Bitmap object after call Bitmap.save()?C#:调用 Bitmap.save() 后 Dispose() 一个 Bitmap 对象?
【发布时间】:2013-08-09 19:02:55
【问题描述】:

我有这个:

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

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

【问题讨论】:

    标签: c# bitmap dispose


    【解决方案1】:

    有一个简单的规则:如果你创建了一个一次性实例并且没有将它传递给另一个ower,你应该dispose它。在您的代码中;因为你已经创建了位图,你也应该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】:

      我会使用using 块和Path.Combine

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

      【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        老实说,这两点本质上是整个争论的焦点——其他一切都是实现细节。虽然在这种情况下,实现细节可能是 GDI+ 句柄,但绝对值得适当清理。但是您可以使用using 让您的生活更轻松:

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

        【讨论】:

          【解决方案5】:

          是的。

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-06-08
            • 2023-03-04
            • 1970-01-01
            • 1970-01-01
            • 2011-06-30
            • 2011-05-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多