使用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()
)。这两种方法做的事情完全相同,所以你应该期望它们的性能非常相似。
如果评测显示这是您需要优化的代码,那么您应该同时尝试两种方法,并衡量哪种更快。
查看源代码(在.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
检查和一个方法调用。但这两个附加功能都可能被优化掉。