使用ToList()与新List(IEnumerable<;T>;)之间的性能差异

本文关键字:之间 gt 性能 lt 与新 ToList List IEnumerable 使用 | 更新日期: 2023-09-27 17:58:01

我很好奇在IEnumerable上使用ToList()与只调用List构造函数"List(IEnumeraable)"会对性能产生什么影响。

示例:

int[] testArray = new int[10];
var list = testArray.ToList();

与。

int[] testArray = new int[10];
var list = new List<int>(testArray);

在使用一个替代另一个时,是否有任何性能影响或最佳实践?

我接管了一个应用程序,在该应用程序中,我调用的控制器方法返回一个数组,但我所拥有的视图需要一个List。

使用ToList()与新List(IEnumerable<;T>;)之间的性能差异

就像其他人已经说过的那样,大多数时候最好的做法是做可读性更强的事情(我认为这意味着使用ToList())。这两种方法做的事情完全相同,所以你应该期望它们的性能非常相似。

如果评测显示这是您需要优化的代码,那么您应该同时尝试两种方法,并衡量哪种更快。

查看源代码(在.Net库的情况下,您可以查看参考源代码或使用反编译器)可能也会有所帮助。ToList看起来像这样:

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) {
    if (source == null) throw Error.ArgumentNull("source");
    return new List<TSource>(source);
}

因此,它的性能应该与new List相同,再加上一个null检查和一个方法调用。但这两个附加功能都可能被优化掉。