创建新对象与覆盖现有对象(性能)



我必须创建大量略有不同的对象进行测试。所有人都将其属性更改为不同的对象,但是一旦我创建对象&用它做点什么,我不再需要它。我应该创建一个新的本地对象还是概括&重新分配循环范围外的对象?

new(local(对象

int testCases = 10;
for(int i=0; i<testCases; i++){
    TestObject localObject = new TestObject();  //local variable for the loop
    //change properties & do stuff with the test object
}

reassign/overwrite现有对象

TestObject myObject;
int testCases = 10;
for(int i=0; i<testCases; i++){
    myObject = new TestObject();    //reassign object that exists outside the loop
    //change properties & do stuff with the test object
}

"更改属性和做事"并不重要,我知道如何创建对象的不同版本,只是不确定我是否应该销毁它们。

您发布的两个代码段之间没有功能差异。分配都在每个循环迭代中发生,无论您将局部变量放在代码中的位置。

,如果您想节省分配,我可以想到您的两个可能的解决方案:

  1. 使用struct而不是类 - 这仅导致使用堆栈空间代替堆。只有堆的用法会导致GC压力。但是,如果您经常将结构传递,则需要通过Ref而不是通过值来避免复制。结构也"想要"是不变的,因此您的使用方式有所限制,但通常不是很大。如果您需要更多地了解结构/价值类型。

  2. 使用对象重置/重复使用语义 - 而不是分配新对象并用数据填充它,而只需一遍又一遍地将同一对象重新填充,而无需重新计量即可。您本质上将对象视为汇总对象。在非平凡的情况下,合并可能会变得复杂,但这是避免在某些情况下避免额外记忆压力的好方法。

最新更新