遍历没有元素的数组或列表,与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);
答案 0 :(得分:4)
foreach
循环需要使用Enumerator
来遍历集合,这需要访问Current
属性并在每次迭代中调用MoveNext
方法,需要一些处理时间。
for
循环只需要在每次迭代中调用get_Item
,因此比foreach
循环少调用一次,这在性能上有细微的差别。