声明一次性物体:环路内部或外部?

时间:2015-04-16 16:51:50

标签: c# performance idisposable

我应该在循环内部还是外部使用using块?有没有明显的性能差异? Graphics对象的情况有什么不同吗?虽然第二种方法可能看起来更好,但while可能是一个长块并且使代码的可读性降低。

while (i < 100)
{
    using(Graphics g = Graphics.FromImage(bitmap)
    {
       g.DrawImage(...);
    }
}

VS

using(Graphics g = Graphics.FromImage(bitmap)
{
   while (i < 100) // a long while block
   {
       // I may use other functions such as g.DrawLine .. or g.DrawText ... 
       // Moreover while could be a long block
       g.DrawImage(...);

   }
}

4 个答案:

答案 0 :(得分:4)

除非你为每个循环使用不同的Bitmap,否则你应该将using块放在它之外。

答案 1 :(得分:2)

在while循环之外的性能方面,所以你不必制作100个对象。这可能取决于您希望如何管理异常。

答案 2 :(得分:2)

根据经验,如果您计划仅使用对象一次或将对象设计为不重复使用,请将using置于循环内(作为示例,请记住SQLCommand类)。否则将它放在循环之外。

在您的特定情况下,如果您的目的是绘制相同的图像100次,那么在循环之外是可行的方法。另一方面,如果你的意图是在循环中绘制100个不同的图像,那么唯一可行的方法是将using放在循环中,因为Graphics对象不能重用另一张图片。

答案 3 :(得分:1)

鉴于示例代码,我绝对会选择第二个选项并将循环放在使用中。这种方式的表现要好得多。

如果还有其他逻辑正在改变您在循环中间使用的位图,则可能需要考虑第一个选项。请注意,您可能会受到性能影响。