哪里最好创建你的对象?

时间:2015-05-05 16:02:23

标签: c#

假设我正在使用

遍历列表或数据读取器
foreach(var v in _list)
{
    ....stuff
}

while(_reader.Read())
{
    ....stuff
}

我想创建一个新的对象实例,仅在每次迭代中使用(例如,每次迭代时必须使用列表或读取器中的值填充的对象),如果我在进入循环之前创建对象,赋值等,然后在下一次迭代之前使对象为空,或者在每次迭代时创建一个新对象?

2 个答案:

答案 0 :(得分:6)

  

我应该在进入循环之前创建对象并分配值等,然后在下一次迭代之前使对象为空,或者在每次迭代时创建一个新对象?

如果仅在循环体内需要对象,则在循环体的范围内创建它。无需在引用范围之外声明对象。垃圾收集器处理这些对象非常有效。

没有必要废除任何东西。

答案 1 :(得分:2)

我个人会在每次迭代时分配一个新对象。我怀疑这些方法会导致不同的IL,因为纯粹根据我的观察结果,你最终会重新使用相同的内存块,并且所有有效发生的事情都是每次迭代都将这些位设置为0。所以为了清洁代码,我只想写;

foreach(var v in _list)
{
    MyReferenceType temp = new MyReferenceType();
    // do stuff with temp object
    // object goes out of scope here and same memory will be reused
    // when we get back to the first statement in the loop
}