Performance Comparison between for, foreach, and ForEeach() method
BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.3007/23H2/2023Update/SunValley3)
AMD Ryzen 7 5800H with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.101
[Host] : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
ShortRun-.NET 5.0 : .NET 5.0.17 (5.0.1722.21314), X64 RyuJIT AVX2
ShortRun-.NET 6.0 : .NET 6.0.26 (6.0.2623.60508), X64 RyuJIT AVX2
ShortRun-.NET 7.0 : .NET 7.0.15 (7.0.1523.57226), X64 RyuJIT AVX2
ShortRun-.NET 8.0 : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
ShortRun-.NET Core 3.0 : .NET Core 3.1.32 (CoreCLR 4.700.22.55902, CoreFX 4.700.22.56512), X64 RyuJIT AVX2
ShortRun-.NET Core 3.1 : .NET Core 3.1.32 (CoreCLR 4.700.22.55902, CoreFX 4.700.22.56512), X64 RyuJIT AVX2
IterationCount=3 LaunchCount=1 WarmupCount=3
IteratorsBenchmark
Method | Runtime | Categories | Length | Mean | Error | StdDev | Allocated |
for |
.NET 5.0 |
Array |
1000 |
267.8 ns |
144.87 ns |
7.94 ns |
- |
for |
.NET 5.0 |
List |
1000 |
354.0 ns |
9.20 ns |
0.50 ns |
- |
foreach |
.NET 5.0 |
Array |
1000 |
487.2 ns |
60.76 ns |
3.33 ns |
- |
ForEach() |
.NET 5.0 |
Array |
1000 |
1,424.1 ns |
398.58 ns |
21.85 ns |
- |
ForEach() |
.NET 5.0 |
List |
1000 |
1,632.8 ns |
38.65 ns |
2.12 ns |
- |
foreach |
.NET 5.0 |
List |
1000 |
1,868.0 ns |
67.89 ns |
3.72 ns |
- |
Method | Runtime | Categories | Length | Mean | Error | StdDev | Allocated |
foreach |
.NET 6.0 |
Array |
1000 |
235.9 ns |
11.99 ns |
0.66 ns |
- |
for |
.NET 6.0 |
Array |
1000 |
244.0 ns |
143.79 ns |
7.88 ns |
- |
for |
.NET 6.0 |
List |
1000 |
353.6 ns |
15.84 ns |
0.87 ns |
- |
foreach |
.NET 6.0 |
List |
1000 |
706.2 ns |
119.70 ns |
6.56 ns |
- |
ForEach() |
.NET 6.0 |
Array |
1000 |
1,410.8 ns |
129.07 ns |
7.08 ns |
- |
ForEach() |
.NET 6.0 |
List |
1000 |
1,646.3 ns |
17.09 ns |
0.94 ns |
- |
Method | Runtime | Categories | Length | Mean | Error | StdDev | Allocated |
foreach |
.NET 7.0 |
Array |
1000 |
238.4 ns |
41.99 ns |
2.30 ns |
- |
for |
.NET 7.0 |
Array |
1000 |
239.9 ns |
68.04 ns |
3.73 ns |
- |
foreach |
.NET 7.0 |
List |
1000 |
470.3 ns |
42.41 ns |
2.32 ns |
- |
for |
.NET 7.0 |
List |
1000 |
475.0 ns |
19.81 ns |
1.09 ns |
- |
ForEach() |
.NET 7.0 |
Array |
1000 |
1,476.6 ns |
2,370.46 ns |
129.93 ns |
- |
ForEach() |
.NET 7.0 |
List |
1000 |
1,560.1 ns |
1,026.42 ns |
56.26 ns |
- |
Method | Runtime | Categories | Length | Mean | Error | StdDev | Allocated |
foreach |
.NET 8.0 |
Array |
1000 |
234.4 ns |
39.83 ns |
2.18 ns |
- |
for |
.NET 8.0 |
Array |
1000 |
239.1 ns |
56.95 ns |
3.12 ns |
- |
for |
.NET 8.0 |
List |
1000 |
353.5 ns |
38.56 ns |
2.11 ns |
- |
foreach |
.NET 8.0 |
List |
1000 |
407.7 ns |
995.06 ns |
54.54 ns |
- |
ForEach() |
.NET 8.0 |
Array |
1000 |
467.2 ns |
30.19 ns |
1.65 ns |
- |
ForEach() |
.NET 8.0 |
List |
1000 |
704.2 ns |
23.72 ns |
1.30 ns |
- |
Method | Runtime | Categories | Length | Mean | Error | StdDev | Allocated |
for |
.NET Core 3.0 |
Array |
1000 |
286.5 ns |
34.44 ns |
1.89 ns |
- |
foreach |
.NET Core 3.0 |
Array |
1000 |
465.4 ns |
21.01 ns |
1.15 ns |
- |
for |
.NET Core 3.0 |
List |
1000 |
472.1 ns |
85.65 ns |
4.69 ns |
- |
ForEach() |
.NET Core 3.0 |
Array |
1000 |
1,627.6 ns |
142.32 ns |
7.80 ns |
- |
ForEach() |
.NET Core 3.0 |
List |
1000 |
1,631.3 ns |
24.71 ns |
1.35 ns |
- |
foreach |
.NET Core 3.0 |
List |
1000 |
1,658.8 ns |
156.41 ns |
8.57 ns |
- |
Method | Runtime | Categories | Length | Mean | Error | StdDev | Allocated |
foreach |
.NET Core 3.1 |
Array |
1000 |
235.7 ns |
25.77 ns |
1.41 ns |
- |
for |
.NET Core 3.1 |
Array |
1000 |
288.7 ns |
40.74 ns |
2.23 ns |
- |
for |
.NET Core 3.1 |
List |
1000 |
473.1 ns |
115.86 ns |
6.35 ns |
- |
ForEach() |
.NET Core 3.1 |
Array |
1000 |
1,397.3 ns |
54.72 ns |
3.00 ns |
- |
ForEach() |
.NET Core 3.1 |
List |
1000 |
1,467.3 ns |
1,345.75 ns |
73.76 ns |
- |
foreach |
.NET Core 3.1 |
List |
1000 |
1,653.8 ns |
402.41 ns |
22.06 ns |
- |