关于if(){}else(){} 和 switch() case的执行效率

原文地址:http://www.cnblogs.com/xie4529298/archive/2012/03/27/2012-3-26.html



关于IF(){}else(){}  switch() case的执行效率

执行效率谁高当被问到这个问题,一下子蒙了,因为以前见过没听过这样的问题

但是既然问道了这个问题就短暂了思考了下:

 我说出了我的想法:

                   If()else()的效率高一些,因为呢以前貌似听老师提到过switchcase 其本意还是IF else, 每一个switch case都可以转换为if else,就大胆猜想了下,switch case 的是if else的再次封装,追究其执行效率应该还是if else ,可是仔细一想,又觉的不对,因为switch case 进入判断执行case的时候只执行一次,假如需判断的条件才if () else()里是最后一个那么这种情况下 switch case的执行效率比if else

  这样一来的话,就纠结了…..

  本着大胆猜想,小心取证的原则,于是有了一下两种猜想:

         猜想一:

                   Ifelse 执行效率高;

                            原因:就像前面提到的猜想switch case if else的再次封装所以它的执行效率高

         猜想二:

                   Switchcase 执行效率高

                            原因:执行同样的逻辑判断 IFelse 的逻辑判断在最后一个,那么它的从第一个开始判断每次经过if 在经过else 在经过if ….那么在switch case 里呢,只需判断其case部分在执行其case下的内容..这样比较的话 switch case的效率貌似比if else的高

         但是呢  这也仅仅是猜想罢了  没有实证的话 猜想 仅仅是猜想 没有说服自己的理由

于是就开始取证

                   计划在执行逻辑部分的{}  switch case分别加入 一个时间 执行结束后分别打印出所需时间….

                   计划随好,却难以执行,因为,逻辑太短的话 根本就比较不出什么 在一个 难道没事去写一个最少有几百个逻辑的ifelse switch case 么第一感觉 太麻烦了吧  于是放弃了这个想法..

                   都说好多发明都是懒人发明出来的..

                   这个办法太麻烦,然后问别人 别人建议用汇编看,写了一段简短代码,直接设断点调试,分别调试if else 和 switch case

                   调试结果 if else 想最终的猜想那样 必须的是一步步来执行的

但是 switch case 的结果却不仅仅是猜想的那样

         到执行switch的时候 首先会先把case 部分成一块一块的 即 case “XXX” 转换为0Xf……其实它是把case部分执向了一个地址 然后这个地址在做case的内容  

         表达能力有限,如果你看到调试过程 你会更清楚

         这样看来的话 switchcase 的执行效率比if else的效率要高从汇编里面看,stwitch case if else的再次封装就不攻自破了

         在取证的过程中 白了下度.

         其结果 跟取证后的结果一样 但是还是有意外发现而不是有意外发生

         如果if else 3~4的话 两个的效率差不多 推荐使用if else 若超过4个以上,推荐switch case 原文是英文的 整不明白 大致翻译结果就是那个样

         至于原因也没深究,想想也是的,就没在做进一步的深究

         想想自己写的代码,也是这样做的,但是其原先却不是这个本意,就着代码看起来整洁 清爽才那样做的,久而久之就养成了习惯,小小深究一下却也还挺有那个缘分 误打误撞呀

  这里还遇到过一个问题 就是 goto 的问题

咂一听以为是SQL里面的,后来别人解释了下其作用,跳出嵌套循环到执行的内容

分别说到了C# 和汇编的解决办法

C# 就是定义全局变量 接受 处理 一层层的天跳出来 或 break return (:是嵌套循环)

汇编呢就是用goto 直接可以跳到指定的内容

感觉这个方法挺不错的于是就想C#有没有呢查下呗

于是乎MSDN了下 C# 也有 goto 意思是一样的

微软真是伟大

下面是MSDN的解释

goto 的一个通常用法是将控制传递给特定的 switch-case 标签或 switch 语句中的默认标签。

goto 语句还用于跳出深嵌套循环。

简单来说就是跳到指定的内容 MSDN上的例子 看一下就能明白

了解到了之后给他们说了下,有人又建议goto 好用但是慎用因为它可以跳到指定的内容就存在进程之间的跳转或内存之间的跳转稍有不慎 就会有意外的惊喜

 至于它的缺点,我也不是很明白 也没说清楚

总之 goto 好用但慎用


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值