作为参数创建的位图是否需要处理?

我可以简单地写:


 using (Graphics graph = Graphics.FromImage(Image1)) {

     graph.DrawImage(Image2.Clone(Rectangle1, Image2.PixelFormat), 0, 0, Image1.Width, Image1.Height);

 }

或者我应该写:


 using (Graphics graph = Graphics.FromImage(Image1))

 using (Bitmap Image3 = Image2.Clone(Rectangle1, Image2.PixelFormat)) {

     graph.DrawImage(Image3, 0, 0, Image1.Width, Image1.Height);

 }


吃鸡游戏
浏览 243回答 2
2回答

千巷猫影

基本的经验法则是,如果你创造了它并且它是一次性的,那么你就处置它。

温温酱

如果有一个方法,它会创建一个一次性对象并将其返回给消费类或方法。它将清理的责任转移到消费类或方法上。在您的情况下 - 这就是克隆方法。调用 Dispose 的责任从您的示例转移到类/方法。如果您的 Dispose 是类中的一个字段 - 那么在大多数情况下,您的类还应该实现IDisposable和处理该字段,作为它的 dispose 方法的一部分。无论何时使用一次性对象,以及使用创建模式(例如工厂)创建一次性对象时,都应该牢记这一点。在某些情况下,一次性资源由某种包装类处理。例如,在其自己的处置方法中StreamReader处置底层Stream。尽管如此,我们仍然可以对流进行处置,因为 StreamReader 的实现,无论多么不可能,将来都可能会发生变化。
打开App,查看更多内容
随时随地看视频慕课网APP