2013-07-25 36 views
0

假设我有以下两个例子,将循环内的变量声明放在循环内部,尤其是性能方面会有什么区别吗?注意:一个新的对象总是在循环内部创建。在哪里放置变量的声明是否重要?

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; 
} 
+0

你说的。循环内部会创建一个新对象。 (并放弃),这可能会导致垃圾收集开销。 – Randy

回答

0

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

我宁愿第一个,因为它的略微尽可能少的代码和限制变量范围通常被认为是良好的做法。

其实更类似于方法1,方法2应该是这样的:

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

因为在循环后,person1仍将指向在最后一次迭代中创建的对象,垃圾收集器会只能释放该对象一次person1离开作用域或被赋予不同的值(即null)。如果这是在一个终止代码块中没有做其他事情,它将在该块的末尾留下作用域,因此null分配并不是真的必要。

+0

感谢您的详细解释!我试图点击向上箭头,但缺乏声誉。 –