我运行了以下控制台应用程序:
为了比较使用
有人能解释一下这种差异吗?为什么会出现这种行为而不是相反的行为。
提前感谢任何帮助!
class Program
{
static void Main(string[] args)
{
int n = 10000;
Stopwatch s = new Stopwatch();
s.Start();
List<int> numbers = GetListNumber(n);
foreach (var number in numbers)
{
}
s.Stop();
Console.WriteLine(s.Elapsed);
Console.WriteLine();
s.Restart();
foreach (var number in GetEnumerator(n))
{
}
s.Stop();
Console.WriteLine(s.Elapsed);
Console.ReadKey();
}
static List<int> GetListNumber(int n)
{
List<int> numbers = new List<int>();
for (int i = 0; i < n; i++)
numbers.Add(i);
return numbers;
}
static IEnumerable<int> GetEnumerator(int n)
{
for (int i = 0; i < n; i++)
yield return i;
}
}
为了比较使用
List
还是IEnumerable
构建集合,我们需要迭代每个元素并比较时间。令人惊讶的是,List
的结果是00:00:00.0005504,而IEnumerable
的结果是00:00:00.0016900。我原本预期第二种方式IEnumerable
会更快,因为这些值是即时创建的,我们无需像在List
中一样逐个添加每个项目,然后迭代它们。有人能解释一下这种差异吗?为什么会出现这种行为而不是相反的行为。
提前感谢任何帮助!