为了账号安全,请及时绑定邮箱和手机立即绑定

案例与其他假设:哪个更有效?

/ 猿问

案例与其他假设:哪个更有效?

慕桂英3389331 2019-11-30 13:33:58

我已经再次在运行中编码。...当调试器逐步执行一个case语句时,它跳转到立即与条件匹配的项目,但是当使用if / else指定相同的逻辑时,它将逐步执行每个if语句。直到找到赢家。case语句是否更有效率,还是我的调试器只是优化了整个过程?(不要担心语法/错误,我在SO中键入了它,不知道它是否可以编译,这是我遵循的原理,我不想这样做是因为int导致我模糊地记得一些关于我使用C#,但是我对跨编程语言的通用答案很感兴趣。


switch(myObject.GetType()){


    case typeof(Car):

        //do something

        break;


    case typeof(Bike):

        //do something

        break;


    case typeof(Unicycle):

        //do something

        break;


    case default:

        break;

}

VS


   Type myType = myObject.GetType();


   if (myType == typeof(Car)){

            //do something

   }


   else if (myType == typeof(Bike)){

            //do something

   }


   else if (myType == typeof(Unicycle)){

            //do something

   }

   else{


   }


查看完整描述

3 回答

?
慕的地8271018

似乎编译器在优化开关语句方面比在if语句方面更好。


编译器不知道评估if语句的顺序对您是否重要,因此无法在其中执行任何优化。您可能会在if语句中调用影响变量的方法。使用switch语句,它知道可以同时评估所有子句,并且可以按照最有效的顺序对其进行排序。


这是一个小的比较:http :

//www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx


查看完整回答
反对 回复 2019-11-30
?
慕容3067478

调试器使它变得更简单,因为您不想单步执行编译器创建的实际代码。


如果该开关包含五个以上的项,则使用查找表或哈希表实现,否则使用if..else实现。


看到密切相关的问题是“否则”是否比“ switch()情况”更快?。


当然,除C#之外的其他语言或多或少地会不同地实现它,但是切换通常会更有效。


查看完整回答
反对 回复 2019-11-30
?
吃鸡游戏

许多编程语言对switch语句进行了优化,以使它比标准if-else(如果结构为编译器常量)的情况要快得多。许多语言使用跳转表或索引分支表来优化切换语句。维基百科对switch语句进行了很好的讨论。另外,这是在C中进行开关优化的讨论。


需要注意的一件事是,switch语句可能会被滥用,并且视情况而定,最好使用多态性来代替switch语句。请参阅此处的示例。


查看完整回答
反对 回复 2019-11-30

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信