开发者

Is there any performance gain by declaring an object outside the loop

I have a code where I'm declaring an object inside a loop, like:

for开发者_C百科each(...)
{
ClassA clA = new ClassA();
clA.item1=1;
clA.item2=2;
ClassB.Add(clA);
}

Will there be any performance gain if I modify the code as follows:

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

Thanks in advance.


There is no performance gain as such. It only helps the variable to go out of scope later than sooner.


The compiler will automatically optimize the code to move the declaration outside the loop anyway, so there is nothing to gain by doing this.

For example

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

Will be optimized be the compiler into this

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


The actual object allocation happens with clA = new ClassA(); so unless you can move it out of the loop you won't get any performance gain.


As everyone's said, not really, but I'd still change your code to:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜