在 switch 语句中使用表达式比较时,编译器会生成一个查找表,其中包含所有表达式的值和对应的 case 标签。因此,与使用常量或字面量比较相比,使用表达式比较可能会略微降低性能。
只有当 switch 语句中的所有 case 标签都使用常量或字面量时,编译器才会生成查找表。如果 switch 语句中包含任何表达式,编译器将使用不同的机制来评估这些表达式,这与 if 语句类似。
因为 switch 语句在编译时可以优化为查找表,而 if 语句则需要在运行时逐个评估每个条件。查找表可以提供更快的查找速度,尤其是在 case 标签较多时。所以,在相同的机器、系统和比较条件下,switch 语句的性能通常大于或等于 if 语句。
下面简单测试一下:
选择相同的6个分支,在循环中来判断。
Stopwatch sw = new Stopwatch();
int iterations = 300000000;
int value = 3;
for (int j = 0; j < 6; j++)
{
Console.WriteLine($"第{j + 1}次比较-----------");
//使用 if 语句进行测试
sw.Start();
for (int i = 0; i < iterations; i++)
{
if (value =