2013-04-12 15 views
-3

这两个语句之间是否存在任何性能差异?性能IEnumerable <T> .ToList()。ForEach()over循环

IEnumerable<T>.ToList().ForEach(x => Console.WriteLine(x)); 

foreach (var obj in IEnumerable<T>) 
    Console.WriteLine(obj) 
+4

你有一个编译器并可以访问'Stopwatch'类 - 为什么不自己测试它? – Oded

+0

是的,因为你不必创建一个列表实例foreach over IEnumerable 应该更快。 – MarcinJuraszek

+0

Arran,它不是重复的,因为我的对象是一个IEnumerable,我必须先创建一个列表。 –

回答

3

在第一个例子,你会

  1. 通过创建列表,通过新的列表枚举源
  2. 枚举,并呼吁Console.WriteLine为每个元素。

在第二个例子中,将

  1. 通过源枚举和呼叫Console.WriteLine每个元素。

有两种表现penalities到第一在第二:

  • 创造新的List对象
  • 双重枚举的:在原始源,然后在列表
+0

Downvoter:关心分享为什么? – AlexFoxGill