我正在使用.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/