强大的技术团队网站建设,wordpress标签里面没文章,wordpress付费文章插件,沅江网站设计在 switch 语句中使用表达式比较时#xff0c;编译器会生成一个查找表#xff0c;其中包含所有表达式的值和对应的 case 标签。因此#xff0c;与使用常量或字面量比较相比#xff0c;使用表达式比较可能会略微降低性能。 只有当 switch 语句中的所有 case 标签都使用常量或…
在 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 1) { }else if (value 2) { }else if (value 3) { }else if (value 4) { }else if (value 5) { }else if (value 6) { }}sw.Stop();Console.WriteLine(If 语句运行时间{0} 毫秒, sw.ElapsedMilliseconds);//使用 switch 语句进行测试sw.Restart();for (int i 0; i iterations; i){switch (value){case 1: break;case 2: break;case 3: break;case 4: break;case 5: break;case 6: break;}}sw.Stop();Console.WriteLine(Switch 语句运行时间{0} 毫秒, sw.ElapsedMilliseconds);}
结果 结论字面量或常量时switch会优于if. 修改上面全面改为表达式: 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 1) { }else if (value 2) { }else if (value 3) { }else if (value 4) { }else if (value 5) { }else if (value 6) { }}sw.Stop();Console.WriteLine(If 语句运行时间{0} 毫秒, sw.ElapsedMilliseconds);//使用 switch 语句进行测试sw.Restart();for (int i 0; i iterations; i){switch (value){case 1: break;case 2: break;case 3: break;case 4: break;case 5: break;case 6: break;}}sw.Stop();Console.WriteLine(Switch 语句运行时间{0} 毫秒, sw.ElapsedMilliseconds);}
结果 结论看来简单的常量表达式也会有优化效率也会提升。 缺点switch不能用于其它复杂的表达式switch 语句中的 case 标签必须是常量表达式。不能包含变量或其他会改变其值的内容。
但大多数情况下都要用到复杂的表达式和变量表达式所以一般用IF而不能用Switch。 switch因为里面会根据case生成查找表所以一般查找表各case是唯一的在输入时就会检查如果case条件重复或矛盾就会有红色提示。但if则不会那怕条件重复也不会提示.