假设我有以下两个例子,将循环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;
}
答案 0 :(得分:0)
这是微优化。所以不,表现明智,这并不重要。在几乎所有非平凡的计划中,任何性能差异都将无关紧要。并且优化器完全有可能将效率较低的表单转换为效率更高的表单(不要问我哪个是哪个)。
我更喜欢第一个,因为它的略微更少的代码,并且尽可能地限制变量范围通常被认为是良好的做法。
实际上,为了更类似于方法1,方法2应如下所示:
Person person1 = null;
foreach (string name in nameList)
{
person1 = new Person();
person1.fullname = name;
}
person1 = null;
因为在循环之后,person1
仍将指向在上一次迭代中创建的对象,所以只有person1
离开作用域或被赋予不同的值时,垃圾收集器才能释放该对象(即null
)。如果这是在一个没有做太多其他操作的终止代码块中,它会将作用域留在块的末尾,因此null
赋值不是必需的。