声明一次性对象:在循环内还是循环外?
Declaring a disposable object: inside or outside a loop?
我应该在循环内还是循环外使用 using
块?有什么明显的性能差异吗? Graphics
对象的情况有什么区别吗?虽然第二种方法可能看起来更好,但 while
可能是一个长块并降低代码的可读性。
while (i < 100)
{
using(Graphics g = Graphics.FromImage(bitmap)
{
g.DrawImage(...);
}
}
对比
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(...);
}
}
除非您为每个循环使用不同的位图,否则您应该将 using 块放在它之外。
就 while 循环之外的性能而言,您不必创建 100 个对象。不过,这可能取决于您希望如何管理异常。
根据经验,如果您打算只使用该对象一次或该对象不是设计为可重用的,请将 using
放在循环中(SQLCommand class 想到作为一个例子)。否则将它放在循环之外。
在您的具体情况下,如果您打算将同一张图像绘制 100 次,那么在循环之外就是可行的方法。另一方面,如果您的意图是在一个循环内绘制 100 个不同的图像,那么唯一可行的方法是将 using
放在循环内,因为 Graphics
对象不能重复使用与另一张图片。
鉴于示例代码,我绝对会选择第二个选项并将循环放在 using 中。这样的性能要好得多。
如果有额外的逻辑在循环中间更改您正在使用的位图,您可能需要考虑第一个选项。请注意,您可能会受到性能影响。
我应该在循环内还是循环外使用 using
块?有什么明显的性能差异吗? Graphics
对象的情况有什么区别吗?虽然第二种方法可能看起来更好,但 while
可能是一个长块并降低代码的可读性。
while (i < 100)
{
using(Graphics g = Graphics.FromImage(bitmap)
{
g.DrawImage(...);
}
}
对比
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(...);
}
}
除非您为每个循环使用不同的位图,否则您应该将 using 块放在它之外。
就 while 循环之外的性能而言,您不必创建 100 个对象。不过,这可能取决于您希望如何管理异常。
根据经验,如果您打算只使用该对象一次或该对象不是设计为可重用的,请将 using
放在循环中(SQLCommand class 想到作为一个例子)。否则将它放在循环之外。
在您的具体情况下,如果您打算将同一张图像绘制 100 次,那么在循环之外就是可行的方法。另一方面,如果您的意图是在一个循环内绘制 100 个不同的图像,那么唯一可行的方法是将 using
放在循环内,因为 Graphics
对象不能重复使用与另一张图片。
鉴于示例代码,我绝对会选择第二个选项并将循环放在 using 中。这样的性能要好得多。
如果有额外的逻辑在循环中间更改您正在使用的位图,您可能需要考虑第一个选项。请注意,您可能会受到性能影响。