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

MethodRuntimeCategoriesLengthMeanErrorStdDevAllocated
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 -
MethodRuntimeCategoriesLengthMeanErrorStdDevAllocated
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 -
MethodRuntimeCategoriesLengthMeanErrorStdDevAllocated
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 -
MethodRuntimeCategoriesLengthMeanErrorStdDevAllocated
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 -
MethodRuntimeCategoriesLengthMeanErrorStdDevAllocated
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 -
MethodRuntimeCategoriesLengthMeanErrorStdDevAllocated
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 -
Powered by https://github.com/mjebrahimi/BenchmarkDotNetVisualizer