使用ToList()与新列表(IEnumerable <t>)</t>之间的性能差异

时间:2014-04-11 17:57:57

标签: c#

我很好奇在IEnumerable上使用ToList()而不仅仅是调用List Constructor&#39; List(IEnumerable)&#39;。

示例:

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

VS

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

使用其中一个是否会对性能产生任何影响或最佳做法?

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

1 个答案:

答案 0 :(得分:7)

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

如果分析显示这是您需要优化的代码,那么您应该尝试两种方式并测量哪一种更快。

查看源代码(在.Net基本库的情况下,您可以查看Reference Source或使用反编译器)也可能有所帮助。 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检查和一个方法调用。但这两项补充都可能会被优化掉。