有没有比下面显示的方法更快的克隆项目的方法?
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();
}
}
最佳答案
正如其他人所提到的,您需要找到真正的瓶颈。就其功能而言,您上面的代码相当紧凑。很可能,它是克隆而不是你的循环。但是,事实证明 Microsoft 已经在 ConvertAll 方法中为您完成了该循环,您可以像这样重新实现上面的代码:
var finallist = itemsToClone.ConvertAll<T>(o => (T)o.Clone());
但是,我猜测这不会成功,因为如果要求我 实现 ConvertAll,我会做一些接近您的循环的事情。事实上,that's pretty much what MS did .
这会直接指向您的 Clone
方法作为罪魁祸首。
关于c# - 有没有更快的方法来克隆项目列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29832339/