猿问

前方比 for 慢 20 倍?

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


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);


开心每一天1111
浏览 89回答 1
1回答

慕斯709654

循环需要使用枚举数来循环访问集合,这需要访问属性并在每次迭代时调用该方法,这需要一些处理时间。foreachCurrentMoveNext循环只需要在每次迭代时调用,因此这比循环少一个调用,这在性能上略有不同。forget_Itemforeach
随时随地看视频慕课网APP
我要回答