在对象上多次调用一个方法而不是多次构造一个对象

时间:2010-06-14 23:14:10

标签: c# object instantiation premature-optimization

我有一个名为myData的List,我想将一个特定的方法(someFunction)应用于List中的每个元素。通过对象的构造函数调用方法比为一个特定的对象实例多次调用相同的方法要慢吗?

换句话说,是这样的:

for(int i = 0; i < myData.Count; i++)
    myClass someObject = new myClass(myData[i]);

慢于此:

myClass someObject = new myClass();
for(int i = 0; i < myData.Count; i++)
    someObject.someFunction(myData[i]);

如果是这样,慢多少?

3 个答案:

答案 0 :(得分:1)

前一种方法可能会导致您的流程工作集显着增加。它还可能给Windows带来内存压力,导致其他应用程序被换出到磁盘。

此外,它会对CLR垃圾收集器施加很大压力,因为您创建的每个新对象都将被跟踪以进行收集。

它会慢多少取决于您正在创建的对象的大小和数量。

答案 1 :(得分:1)

你可以使它更快,如果你使用静态方法,请使用visual studio 2010中的Code Analisys,它会警告你,如果某种方法是静态的候选者。

答案 2 :(得分:0)

从性能角度来看,第二个代码块很可能会更快,因为它没有额外的对象实例化和垃圾回收开销。