性能更好 - clone()或使用new关键字进行实例化?

时间:2009-03-04 15:26:03

标签: c# .net

当我们想为某个类创建新对象时,如果我们已经有了一个,我们应该使用clone()还是使用new关键字实例化?

是的,clone()也会复制所有成员,但我很好奇这个无关紧要的情况。

ClassType foo = new ClassType();
ClassType bar = new ClassType();  // here, will foo.clone() be better choice?

我在目前的任务中需要这个,因为我正在使用通用列表(列表< T >),这些列表有时很大并且在实际上通过'n'层之前传递用于UI。(它们之间转换为Array并返回列表以用于序列化目的)。所以,我只是想提高性能。

7 个答案:

答案 0 :(得分:7)

Clone()无论如何都会new,所以为什么要这么麻烦?

调用Clone()无论如何都会产生新的引用,最重要的是复制所有成员,所以它肯定会慢一些。

答案 1 :(得分:6)

听起来你正在做过早的优化。简介,您通常会在时间进展中感到惊讶。我怀疑它会在这里,除非你的“克隆”使用序列化。

那说; ICloneable.Clone()值得避免,因为它定义不清楚(深度与浅度)并且很少得到支持。在幕后,大多数Clone()实现只需执行new(); // now copy properties,或者使用序列化。

答案 2 :(得分:4)

克隆旨在生成一个与原始对象相同(或多或少 - 即深与浅 - 即雷区)的对象,与新实现不同的目的仅仅是实例化不相关的类实例。

摘要:它们用于不同的目的,它们不可互换。

答案 3 :(得分:3)

clone必须分配一个新对象(即,它在某处调用new),因此它不可能表现得更好。换句话说,new性能是clone性能的下限。

答案 4 :(得分:2)

.clone肯定比较慢。

答案 5 :(得分:1)

我想象新的,因为克隆将不得不在背景中新建对象,加上常规克隆职责。

和往常一样,如果有疑问,请简介!

答案 6 :(得分:1)

这取决于构造函数中完成的工作量。 Clone()会将每个成员值从第一个类复制到第二个类。你的构造函数是做更多还是更少的工作?答案应该告诉你。

相关问题