娱乐或重新初始化?

时间:2011-01-04 05:29:12

标签: performance

很多时候,我遇到了一个循环,并且在循环开始时构造了一个新对象并添加到集合中。例如,伪代码:

iterating over a resultset do
  create an object
  set instance data in object to some resultset data
  put object in collection
next

这种做法是怎样的呢?

create an object 
iterating over a resultset do
  set instance data in object to some resultset data
  put object in collection
next

这两种方法的优点和缺点是什么?哪个可以更快?有没有比这两个更好的方法?

P.S。 :我不知道要放什么标签。请原谅我。

2 个答案:

答案 0 :(得分:0)

你的最终伪代码应该更像:

create an object 
iterating over a resultset do
  set instance data in object to some resultset data
  **clone** object into collection
next

因为否则你最终会得到最终对象的这么多副本,因为你一直在修改你添加引用的同一个对象。所以你并没有真正保存任何对象空间或创建时间。如果由于某种原因你不想重新初始化每个循环,第二种方法是完全有效的,例如当你需要更改每个循环时你必须初始化的更少的成员。只需确保对象的复制构造函数是健壮的。

答案 1 :(得分:0)

根据您用来实现的语言,您将获得不同的结果。 某些语言返回对对象的引用。因此,第一个选项将按预期执行,因为创建了一个新对象并将其附加到具有自己值的集合中。

iterating over a resultset do
    create an object
    set instance data in object to some resultset data
    put object in collection
next

但是如果语言只是返回对象的引用而你尝试做第二种方法

create an object (x)
iterate over resultset do
    set instance data in object (x) to resultset data (returns a reference to x with updated data)
    put object in collection (puts a reference to x in collection)
next

因此,在迭代结果集之后,您将最终得到一组对集合中同一对象的引用,其值为上次分配的值。