通过声明循环外的对象是否有任何性能提升

时间:2011-03-02 11:09:12

标签: c# performance

我有一个代码,我在循环中声明一个对象,如:

foreach(...)
{
ClassA clA = new ClassA();
clA.item1=1;
clA.item2=2;
ClassB.Add(clA);
}

如果我按如下方式修改代码,是否会有任何性能提升:

ClassA clA;
foreach(...)
{
clA = new ClassA();
clA.item1=1;
clA.item2=2;
ClassB.Add(clA);
}

提前致谢。

4 个答案:

答案 0 :(得分:4)

没有这样的性能提升。它只会帮助变量超出范围,而不是更早。

答案 1 :(得分:3)

编译器会自动优化代码,无论如何都要在循环外部移动声明,因此这样做没有任何好处。

例如

while(...){
  int i = 5;
  ...
}

将优化编译成这个

int i;
while(...){
  i = 5;
  ...
}

答案 2 :(得分:1)

实际的对象分配发生在clA = new ClassA();,所以除非你可以将它移出循环,否则你不会获得任何性能提升。

答案 3 :(得分:1)

正如大家所说,并非如此,但我仍然会将您的代码更改为:

foreach(...)
{
ClassB.Add(new ClassA() { item1=1, item2=2 });
}