Foreach
The C# statement foreach
is a convenient way to traverse an enumerable collection, but because it uses an enumerator it is also more expensive than a normal for
loop.
The following code uses a trivial foreach
loop:
int k = 0; foreach loopforeach (int j in list) { k = j; }
This code uses a for
loop instead:
int k = 0; int listLength = list.Count; for (int i = 0; i < listLength; i++) { k = list[i]; }
For completeness, I also tested a loop that counts backwards to zero, rather than forwards to the list count:
int k = 0; for (int i = list.Count - 1; i >= 0; i--) { k = list[i]; }
I used a List<int>
with 1000 integers. On my machine, the results were:
Test |
Time taken (ticks) |
---|---|
foreach 1000 List<int> accesses |
168 |
for 1000 List<int> accesses |
80 |
for backwards - 1000 List<int> accesses |
75 |
This concludes that if you're counting every CPU cycle, you may want to look at tight foreach
loops with very high numbers of iterations. Looping backwards will give you a very...