【发布时间】:2015-07-02 03:55:37
【问题描述】:
有没有比下面显示的更快的克隆项目的方法?
private List<T> CloneItems(List<T> itemsToClone) {
lock (dataLocker) {
Stopwatch sw = Stopwatch.StartNew();
int numItems = itemsToClone.Count;
List<T> itemsToBeReturned = new List<T>(numItems);
for (int i = 0; i < numItems; i++) {
itemsToBeReturned.Add((T)itemsToClone[i].Clone());
}
Debug.WriteLine("CloneItems(ms): " + sw.Elapsed.TotalMilliseconds.ToString("F3"));
return itemsToBeReturned;
}
}
编辑:我需要一个深层副本,目前正在将它与以下对象一起使用:
public class TimestampedDouble {
public long Timestamp { get; set; }
public double Voltage { get; set; }
public double Current { get; set; }
...
public override object Clone() {
return MemberwiseClone();
}
}
【问题讨论】:
-
浅克隆还是深克隆?
-
为什么投反对票?我做错了什么?
-
@RonBeyer 如果这三个属性是唯一的,那么在 this 特定情况下,这将是一个深拷贝,因为这些属性都是值类型。
-
您要复制这些
TimestampedDouble中的多少?你试过this answer之类的吗? -
@Cameron 我每 20 毫秒复制数百个 TimestampedDoubles。我查看了您的链接答案并尝试了这个变体(据说比序列化方法快 3 倍),它比我在原始帖子中的方法慢约 20 倍:raw.github.com/Burtsev-Alexey/net-object-deep-copy/master/…
标签: c# performance list clone