Skip to content

Latest commit

 

History

History

BranchingTechniques

Branching Techniques

This benchmark compares various types of branching that is possible inside of C#: switch statements, switch expressions, if statements, and conditional expressions.

Note: large conditional expressions cause a StackOverflowException in Roslyn and cannot be built.

BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1016 (1909/November2018Update/19H2)
Intel Core i7-4790K CPU 4.00GHz (Haswell), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=5.0.100-preview.8.20417.9
  [Host]     : .NET Core 5.0.0 (CoreCLR 5.0.20.40711, CoreFX 5.0.20.40711), X64 RyuJIT
  DefaultJob : .NET Core 5.0.0 (CoreCLR 5.0.20.40711, CoreFX 5.0.20.40711), X64 RyuJIT

Method Mean Error StdDev Median
switchStatement1 0.0014 ns 0.0029 ns 0.0027 ns 0.0000 ns
switchExpression1 0.2407 ns 0.0097 ns 0.0090 ns 0.2412 ns
if1 0.2357 ns 0.0076 ns 0.0071 ns 0.2352 ns
conditional1 0.5756 ns 0.0365 ns 0.0448 ns 0.5699 ns
switchStatement2 1.4590 ns 0.0133 ns 0.0124 ns 1.4559 ns
switchExpression2 1.5196 ns 0.0555 ns 0.0814 ns 1.5300 ns
if2 1.3594 ns 0.0532 ns 0.0523 ns 1.3353 ns
conditional2 1.1767 ns 0.0333 ns 0.0311 ns 1.1730 ns
switchStatement3 4.1114 ns 0.0771 ns 0.0602 ns 4.1107 ns
switchExpression3 4.3437 ns 0.1110 ns 0.1520 ns 4.3152 ns
if3 3.8700 ns 0.0404 ns 0.0358 ns 3.8752 ns
conditional3 3.5161 ns 0.0676 ns 0.0632 ns 3.5530 ns
switchStatement4 5.6173 ns 0.0763 ns 0.1470 ns 5.6022 ns
switchExpression4 6.1340 ns 0.1434 ns 0.1271 ns 6.0750 ns
if4 6.2361 ns 0.1501 ns 0.2338 ns 6.2479 ns
conditional4 5.5457 ns 0.0675 ns 0.0599 ns 5.5537 ns
switchStatement5 7.0590 ns 0.1593 ns 0.1897 ns 7.0144 ns
switchExpression5 6.9517 ns 0.1623 ns 0.2756 ns 6.8837 ns
if5 8.8664 ns 0.0877 ns 0.0820 ns 8.8887 ns
conditional5 7.8437 ns 0.1637 ns 0.1608 ns 7.8131 ns
switchStatement10 15.2778 ns 0.3325 ns 0.3696 ns 15.2038 ns
switchExpression10 17.0714 ns 0.3612 ns 0.5730 ns 16.9284 ns
if10 28.8714 ns 0.4889 ns 0.5231 ns 28.7261 ns
conditional10 16.4725 ns 0.1321 ns 0.1235 ns 16.4475 ns
switchStatement100 143.5896 ns 1.1010 ns 0.9760 ns 143.2851 ns
switchExpression100 157.8319 ns 2.9648 ns 2.3147 ns 157.1144 ns
if100 1,788.5813 ns 35.2708 ns 39.2034 ns 1,787.3701 ns
conditional100 701.0713 ns 3.3936 ns 3.1744 ns 699.9504 ns
switchStatement1000 6,243.7404 ns 126.9243 ns 366.2056 ns 6,067.1780 ns
switchExpression1000 4,642.0040 ns 90.2316 ns 96.5468 ns 4,622.6555 ns
if1000 270,967.1061 ns 2,022.8634 ns 1,579.3187 ns 271,108.5205 ns
conditional1000 NA NA NA NA

Benchmarks with issues: BranchingTechniquesBenchmarks.conditional1000: DefaultJob