foreach比它慢20倍?

时间:2019-02-01 23:29:37

标签: c# performance loops for-loop foreach

遍历没有元素的数组或列表,与for相比,foreach似乎很慢。运行下面的代码,我得到的结果是:

3ms
143ms
7ms

是foreach真的很慢还是我做错了什么?

var l = new List<int>();
var watch = new Stopwatch();
var test = 0;

watch.Start();
for (int i = 0; i < 10000000; i++) 
    if (l.Count > 0) 
        test = 1;
watch.Stop();
Debug.Log(watch.ElapsedMilliseconds);

watch.Reset();
watch.Start();
for (int i = 0; i < 10000000; i++) 
    foreach (var item in l) 
        test = 1;
watch.Stop();
Debug.Log(watch.ElapsedMilliseconds);

watch.Reset();
watch.Start();
for (int i = 0; i < 10000000; i++) 
    for (int j = 0; j < l.Count; j++) 
        test = 1;
watch.Stop();
Debug.Log(watch.ElapsedMilliseconds);

1 个答案:

答案 0 :(得分:4)

foreach循环需要使用Enumerator来遍历集合,这需要访问Current属性并在每次迭代中调用MoveNext方法,需要一些处理时间。

for循环只需要在每次迭代中调用get_Item,因此比foreach循环少调用一次,这在性能上有细微的差别。