我正在使用 .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# List<T>.ToArray 性能不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1147497/