我正在使用.Net 3.5(C#),并且听说C#List<T>.ToArray的性能很差,因为它会内存复制所有元素以形成一个新数组。真的吗?

最佳答案

不,那不是真的。性能很好,因为它所做的只是内存复制所有元素(*)以形成一个新数组。

当然,这取决于您定义为“好”或“差”的性能。

(*)引用类型的引用,值类型的值。

编辑

根据您的评论,使用Reflector是检查实现的好方法(请参见下文)。或者只是花几分钟思考一下您将如何实现它,并相信微软的工程师不会提出更差的解决方案。

public T[] ToArray()
{
    T[] destinationArray = new T[this._size];
    Array.Copy(this._items, 0, destinationArray, 0, this._size);
    return destinationArray;
}

当然,“好”或“坏”的性能仅相对于某些替代方案具有含义。如果在您的特定情况下,有一种可替代的方法可以更快地实现您的目标,那么您可以认为性能是“不好的”。如果没有这样的选择,则性能为“良好”(或“足够好”)。

编辑2

在回应评论:“没有重建对象吗?” :

没有重构引用类型。对于值类型,将复制值,可以将其大致描述为重构。

关于c# - C#List <T> .ToArray性能不好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1147497/

10-11 15:52
查看更多