我把变量的声明放在哪里?

时间:2013-07-25 15:12:00

标签: performance initialization declaration definition

假设我有以下两个例子,将循环VS之外的变量声明放在循环中会有什么区别,特别是性能明智吗?注意:始终在循环内创建一个新对象。

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 个答案:

答案 0 :(得分:0)

这是微优化。所以不,表现明智,这并不重要。在几乎所有非平凡的计划中,任何性能差异都将无关紧要。并且优化器完全有可能将效率较低的表单转换为效率更高的表单(不要问我哪个是哪个)。

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

实际上,为了更类似于方法1,方法2应如下所示:

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

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