关于性能:将变量声明放在何处是否重要?

Does it matter where I put the declaration of a variable?

假设我有以下两个示例,将变量声明置于循环VS循环之外是否会有任何区别,特别是在性能方面? 注意:总是在循环内创建一个新对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Method 1:
foreach (string name in nameList)
{
    Person person1 = new Person();
    person1.fullname = name;
}

Method 2:
Person person1 = null;
foreach (string name in nameList)
{
    person1 = new Person();
    person1.fullname = name;
}


这是一个微观优化。 因此,不,从性能角度来看,这并不重要。 在实际上所有非平凡程序中,任何性能上的差异都将变得无关紧要。 优化器完全有可能将效率较低的形式转换为效率较高的形式(不要问我是哪一个)。

我更喜欢第一个,因为它的代码略少,并且尽可能多地限制变量范围通常被认为是好的做法。

实际上,与方法1更相似,方法2应该如下所示:

1
2
3
4
5
6
7
Person person1 = null;
foreach (string name in nameList)
{
    person1 = new Person();
    person1.fullname = name;
}
person1 = null;

因为在循环之后,person1仍将指向上一次迭代中创建的对象,所以一旦person1离开范围或被分配了不同的值(即null),垃圾收集器将只能释放该对象。 如果这在终止代码块中没有做太多其他事情,它将把作用域留在该块的末尾,因此null分配实际上不是必需的。