C# 什么';clone()或使用new关键字实例化的性能更好吗?

C# 什么';clone()或使用new关键字实例化的性能更好吗?,c#,.net,C#,.net,当我们想为某个类创建新对象时,如果我们已经有了对象,我们应该使用clone()还是使用new关键字进行实例化 是的,clone()也会复制所有的成员,但我很想知道这样一种情况:这不重要 ClassType foo = new ClassType(); ClassType bar = new ClassType(); // here, will foo.clone() be better choice? 在我当前的一项任务中,我需要这一点,因为我正在处理通用列表(List),这些列表有时会变得

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

是的,clone()也会复制所有的成员,但我很想知道这样一种情况:这不重要

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

在我当前的一项任务中,我需要这一点,因为我正在处理通用列表(List
),这些列表有时会变得非常庞大,在实际用于UI之前会经过“n”层(它们之间会转换为数组并返回到列表,以便序列化)。所以,我只是想提高性能。

.clone肯定会慢一些。

clone()
无论如何都会做一个
新的
,为什么要麻烦呢


调用
Clone()
无论如何都会产生一个新的引用,而且所有成员都会被复制,所以速度肯定会变慢。

我想象是新的,因为Clone必须在后台更新对象,再加上常规的克隆任务


一如既往,如果有疑问,请提供个人资料

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

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

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


也就是说
ICloneable.Clone()
值得避免,因为它的定义很差(深度vs浅),而且很少受到支持。在幕后,大多数
Clone()
实现要么只是执行
new();/现在复制属性
,或者使用序列化。

克隆的目的是生成一个与原始对象完全相同的对象(多多少少,即深或浅,即雷区),与新对象不同,新对象只是实例化一个不相关的类实例


小结:它们有不同的用途,不能互换。

不清楚,你是在克隆IList吗?或者一些普通的C#类型?我不是在克隆泛型列表,而是在列表中添加我自己的对象。这就是我问题的中心。你想要一个浅的还是深的克隆人?()最好听说您已经看到了IClonable.Clone()或Object.MemberwiseClone()方法的源代码来声明它。浅层副本并不意味着调用类构造函数,因为创建的新实例不会抛出“new”关键字。它只是将内存转储的一部分(值类型属性,逐位复制)复制到内存中,并复制新实例的引用(引用类型属性)。在问题的上下文中,深度副本可能不会引起我们的兴趣,但它实现了相同的功能,但所有引用都应该重新初始化。如果我错了,请纠正我。