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

Kun*_*l S 2 .net c#

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

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

ClassType foo = new ClassType();
ClassType bar = new ClassType();  // here, will foo.clone() be better choice?
Run Code Online (Sandbox Code Playgroud)

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

Ger*_*nck 7

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

Clone()无论如何,调用将导致新的引用,并且所有成员都被复制,因此它肯定会更慢.


Mar*_*ell 7

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

那说; ICloneable.Clone()值得避免的原因很简单,因为它定义不清楚(深度与浅度)并且很少得到支持.在幕后,大多数Clone()实现要么只做一个new(); // now copy properties,要么使用序列化.