IF 与 SELECT CASE 哪个效率较高?

xhggg 2003-11-18 02:48:44
有个数值取值范围1~10 ,原来取值范围是1~2所以用IF,但改为1~10后,IF就显得十分繁琐,但又不清楚select case 的效率,因为程序需读写串口,执行效率不能太低。请指点。
...全文
2500 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigsanddogs 2003-11-18
  • 打赏
  • 举报
回复
原因是asm一次只能比较2个数
最终代码都是如下形式
cmp eax dword ptr [a]
jeq lbla
cmp eax dword ptr [b]
jeq lblb
cmp eax dword ptr [c]
jeq lblc
.... (deafult)
jmp lblEnd
lbla:
..... (1)
jmp lblEnd
lblb:
.....
jmp lblEnd
lblc:
.....
lblEnd:
..
pigsanddogs 2003-11-18
  • 打赏
  • 举报
回复
大部分情况下select case与if elseif else end效率相当,不过select case的可读性更好一些

select case VAR
case a
... (1)
case b
...
case c
...
case deafult
...
end select
在汇编代码中等同
if VAR=a then
... (1)
elseif VAR=b then
...
elseif VAR=c then
...
else
...
endif
如果你写过汇编代码就知道程序的流程了
2者效率一样
对于概率大的数应该放到第一位
Liubin 2003-11-18
  • 打赏
  • 举报
回复
select case
有书直接讨论过
subzero 2003-11-18
  • 打赏
  • 举报
回复
大部分情况下select case与if elseif else end效率相当,不过select case的可读性更好一些
boydgmx 2003-11-18
  • 打赏
  • 举报
回复 1
我在处理JPEG图片时,也需要判断某个段的开始标志,同样是对大型字节数组处理,AresChen
文中的处理方法值得学习!!
boyzhang 2003-11-18
  • 打赏
  • 举报
回复
问得好!

Select应该快一些,因为,一个Select控件可以判断很多条件,如果用IF结构,就要加载很多IF控

件,不过,不知道那个控件更消耗资源....
cqs76 2003-11-18
  • 打赏
  • 举报
回复
up
xhggg 2003-11-18
  • 打赏
  • 举报
回复
我原来有段程序是在select case 中,不过为求省事没用变量,而用文本框中的数据直接转换累加的:如:text(0).text=val(text(0).text)+1 结果效率极低!就算效率低也可以忍受,但我发现这样居然会影响我的串口通讯(接收数据),所以以后就特别重视程序的执行效率。
谢谢各位,我想我已经知道该用什么了!
AresChen 2003-11-18
  • 打赏
  • 举报
回复 1
不要太钻牛角尖,select语句编译成机器语言后同样也是用if的形式去判断。不过现在的像VB这样的编译器对代码都会作一定程度上的优化,所以,我想你的性能不会受到什么影响。需要注意的是类似这样的情况:我以前一个程序中,需要在一个大数组里寻找连续的几个数,作为数据的开头,标准的原型应该是这样的,
for i=0 to ubound(b)-4 'b是一个byte型的数组
if b(i)=1 and b(i+1)=2 and b(i+3)=3 and b(i+4)=4 then
msgbox "Found!!!"
end if
next i
但是我发现这样的写法效率非常低,我改用了下面的写法:
for i=0 to ubound(b)-4
if b(i)=1 then
if b(i+1)=2 then
if b(i+3)=3 then
if b(i+4)=4 then
msgbox "found!!!"
endif
endif
endif
endif
next i
结果效率的提升是非常明显的。但我这样作的前提是,数组b是比较大的,比如上千,如果b中仅保存几百甚至几十的话,那还不如采用第一种写法,因为读起来至少好一些,而效率也不会有非常大的影响。
馮強 2003-11-18
  • 打赏
  • 举报
回复
要看复杂程度了,一般说来差不多,复杂的分支建议用select case ,程序的可读性要强很多,现在的配置,这点效率差别几乎可以忽略。
strongfisher 2003-11-18
  • 打赏
  • 举报
回复
select case 效率高
lxxldd 2003-11-18
  • 打赏
  • 举报
回复
if 要比select case 效率高
longyangyang 2003-11-18
  • 打赏
  • 举报
回复
select case 效率就是很好了,你完全可以用

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧