c# - 有没有更快的方法来克隆项目列表?

标签 c# performance list clone

有没有比下面显示的方法更快的克隆项目的方法?

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/

相关文章:

c# - 在 C# 中使用命名空间

algorithm - 如何在 Matlab 中加速我的代码 [包括示例]?

c# - 如何有效地比较两个对象并计算相等属性的数量?

c# - .NET Web API 异常错误详细信息

c# - Coldfusion 8 互操作的最大 .NET 版本?

c++ - 高效安全地分配唯一 ID

java - 在 Java 中,我应该使用 ArrayList<Long> 还是 long[] ?

list - 如何在整数数组上组合映射和复制

python - 在字典中填充字典

没有正文的 C# 方法