C# List<T>.ToArray 性能不好?

标签 c# .net performance memory

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

相关文章:

c# - 由于单引号,XpathNavigator 给出 System.Xml.XPath.XPathException

c# - 电话号码的正则表达式,不允许全为零

c# - ImageButton 中的回发或回调参数无效

linux - 需要性能计数器信息

Javascript 性能,重新创建函数还是绑定(bind)呢?

c# - 在 C# 中实现蒙特卡洛模拟时的奇怪行为

c# - 从 BackgroundWorker 中的剪贴板获取数据

.net - 字母数字的正则表达式,但至少有一个字母

c# - 如何使用 Entity Framework 自动过滤掉软删除的实体?

c - 存储更多 bool 值的最有效方法