Skip to content

Instantly share code, notes, and snippets.

@kshyju
Last active June 15, 2022 23:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kshyju/d099eacc1dc1558c4382b6afd186d2bb to your computer and use it in GitHub Desktop.
Save kshyju/d099eacc1dc1558c4382b6afd186d2bb to your computer and use it in GitHub Desktop.
Benchmark results of IF-ELSE vs Switch statement
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.25141
Intel Xeon CPU E5-1650 v4 3.60GHz, 1 CPU, 12 logical and 6 physical cores
.NET SDK=6.0.300
  [Host]     : .NET 5.0.17 (5.0.1722.21314), X64 RyuJIT
  DefaultJob : .NET 5.0.17 (5.0.1722.21314), X64 RyuJIT

Method Mean Error StdDev Allocated
IfElse 8.052 ns 0.2028 ns 0.4820 ns -
SwitchStatement 8.330 ns 0.2069 ns 0.3281 ns -
SwitchExpression 7.880 ns 0.1963 ns 0.4268 ns -
public enum Color
{
Red,
Green,
Blue,
White
}
[MemoryDiagnoser]
public class ControlStatementsBenchmarks
{
Color[] colors = new Color[]
{
Color.Red,
Color.Blue,
Color.Green
};
[Benchmark]
public int IfElse()
{
int result = 0;
for (var i = 0; i < colors.Length; i++)
{
result += ProcessUsingIf(colors[i]);
}
return result;
}
[Benchmark]
public int SwitchStatement()
{
int result = 0;
for (var i = 0; i < colors.Length; i++)
{
result += ProcessUsingSwitchStatement(colors[i]);
}
return result;
}
[Benchmark]
public int SwitchExpression()
{
int result = 0;
for (var i = 0; i < colors.Length; i++)
{
result += ProcessUsingSwitchExpression(colors[i]);
}
return result;
}
private int ProcessUsingIf(Color input)
{
if (input == Color.White)
{
return 0;
}
else if (input == Color.Red)
{
return 1;
}
else if (input == Color.Green)
{
return 2;
}
else
{
return 9;
}
}
private int ProcessUsingSwitchStatement(Color input)
{
switch (input)
{
case Color.White:
{
return 10;
}
case Color.Red:
{
return 11;
}
case Color.Green:
{
return 12;
}
default:
{
return 19;
}
}
}
private int ProcessUsingSwitchExpression(Color input)
{
return input switch
{
Color.White => 0,
Color.Red => 1,
Color.Green => 2,
_ => 9
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment