吐血啊。。if 和iif的差距真有那么大吗?
vb吧
全部回复
仅看楼主
吧务
level 13
做以下判断
C=100
J=10
IF J-C> 0 then
t=J-C
Else
T=0
end if
T=IIF(J-C>0,J-C,0)
这。。
IF居然比IIF快6倍。。。
2012年07月14日 12点07分 1
吧务
level 13
更吐血的是
加Else比不加Else会快。。。。
这。。。这是怎么回事?
2012年07月14日 12点07分 2
level 6
你怎么知道快六 倍?
2012年07月14日 12点07分 3
我试过了。。
2012年07月14日 13点07分
吧务
level 15
我们对 If 和 IIf 进行了循环 Counts 次的测试
测试比较结果如下
Counts   If   IIf
10000   0 ms   0 ms
100000   1 ms   3 ms
1000000  10 ms   32 ms
10000000  101 ms  326 ms
If 确实比 IIf 快
2012年07月14日 13点07分 4
美女求罩啊~!!!!
2012年07月15日 05点07分
美女,你的签名代码,结果我看懂了,但是过程没理解~
2014年07月16日 06点07分
回复 lv0000011 :就是往注册表的开机启动的命令里写关机代码
2014年07月16日 13点07分
这看起来只快3倍多。
2014年07月16日 13点07分
level 9
专家来了![Love]
IIf函数比If语句快,是当然的,
If只是几个判断和跳转指令,而IIf需要调用vb库函数,还要转换条件句类型(尽管你的类型完全匹配),然后判断,再取结果句,再转换类型
加Else比不加Else会快:
这个只是特例,你的代码编译之后,运行流程是这样的:
有else的
赋 t为0
判断 j - c > 0(成立)
如果 不成立,跳到lp1
赋 t为-90(也就是10-100)
lp1:继续
可以看出,"如果"到lp1的那一段并没有执行
没else的
赋 t为-90
判断 j - c > 0(成立)
如果 不成立,跳到lp1
赋 t为0(也就是10-100)
lp1:继续
可以看出,"如果"到lp1的那一段执行了
事实上,可执行文件只是多执行了一条机器代码,很不明显,当然,在VB_IDE里就会扩大无数倍
2012年07月14日 13点07分 5
是if语句比iif函数快
2012年07月14日 13点07分
回复 @柳飞花落 :救命啊!!!!头一句打错字了啊!!是慢,不是快
2012年07月14日 14点07分
@ydm_bd 不加ELSE编译器会自动补加吧。
2012年07月14日 17点07分
@《顾名思义》 是的,反正一大堆vb所谓的"优化"
2012年07月17日 09点07分
level 13
函数当然要比If语句慢。
2012年07月14日 13点07分 6
level 9
5楼(我自己)
头一句打错字了,是慢,不是快
2012年07月14日 14点07分 7
高手求罩
2012年07月15日 05点07分
level 11
最快的是用逻辑位运算取代条件分支。
2012年07月14日 16点07分 8
你有更高的做法?IF不是最基本的吗?
2012年07月14日 17点07分
像你上面那句就可以用t=(j-c>0) and (j-c)代替
2012年07月14日 17点07分
@Zatans 。。。。and 比IF还要慢。。。[拍砖]
2012年07月14日 17点07分
@《顾名思义》 怎么可能。你自己试试,比if快多了。
2012年07月14日 17点07分
吧务
level 13
回复 @Zatans 这是测试结果。。
以前做绘图时测试过,在And每次四个字节做运算时,CopyMemory不如AND当大于120个字节(也就是A(29)as long)时AND就不如CopyMemory快了。。。

2012年07月14日 17点07分 9
话说lz的电脑到底是什么版本
2014年07月16日 13点07分
吧务
level 13
这个例子说明,越是写起来简单的代码就说明速度会比按常规方法写出来的代码要慢。。。。
2012年07月14日 17点07分 10
不一定:a = b = c 就比 If b = c Then a = True Else a = False 快。
2012年07月24日 05点07分
a = b = c请问VB可以这样写?
2012年07月24日 06点07分
VB的 A = B = C 相当于VC的 A = B == C,也就是B与C相等,A为True,否则A为False。比较运算的返回值可以直接赋值给布尔变量。
2012年07月25日 15点07分
回复 《顾名思义》 :怎么不能这么写[咦]你这小吧有点水啊
2014年07月16日 15点07分
level 11
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Load()
Dim J As Long, I As Long, T1 As Long, T2 As Long, C As Long, A As Long
J = 100
C = 10
T1 = GetTickCount
For I = 0 To 100000000
If J - C > 0 Then
A = J - C
Else
A = 0
End If
Next I
T1 = GetTickCount - T1
T2 = GetTickCount
For I = 0 To 100000000
'A = (J - C > 0) And (J - C)
A = J - C
A = A > 0 And A
Next I
T2 = GetTickCount - T2
MsgBox "T1 - " & T1 & vbCrLf & "T2 - " & T2
End Sub
编译成EXE再运行.
2比1快1/3.
2012年07月14日 18点07分 11
IDE差点卡死我了。。。
2012年07月15日 05点07分
能说一下为什么在IDE是反过来的吗?
2012年07月15日 05点07分
@《顾名思义》 IDE是解释运行啊亲
2012年07月15日 05点07分
@Zatans 呵呵 亲 好久不见了、你激动了
2012年07月15日 06点07分
level 9
要我说,If才是最好的,位运算设计起来比较难,而且位运算只能实现用于赋值的If,局限性太大
当然,不要用IIf
2012年07月15日 01点07分 13
level 5
知道快慢以后就专门用IF呗。
2012年07月15日 09点07分 14
level 13
觉得测试这个没多大意义,平时编程能有100000000……这么大的运算量吗?
既然这么追求效率为什么还要用VB?为了安全性而损失效率是VB的特性之一。
2012年07月17日 01点07分 15
当然有必要,比如,如果是做游戏,要不段更新图像,而全画出来的控件当然要计算位置。不管是放在Do中还是放到Timer中差不多都算无限循环了。绘图就更不用说了那真是能快就快,最常见的就是单字节判断,不然就会溢出了。一个1024*768*4这要计算多少次。。。
2012年07月17日 04点07分
更不要说是1600*1400的图像了。。。
2012年07月17日 04点07分
也就弄点小游戏玩玩了,大游戏还考虑用VB做呀?真折磨
2012年07月17日 04点07分
@佐腾君♂ 2.5D网游类型的到是没什么问题,重要的还是资原问题。必定在下的美工不怎么好。
2012年07月17日 15点07分
level 9
突然想到个问题,但是现在不能yomg
2012年07月23日 03点07分 16
level 9
用电脑,所以哪位帮忙测试下,自己编写iif函数快还是vb的快
2012年07月23日 03点07分 17
level 9
用电脑,所以哪位帮忙测试下,自己编写iif函数快还是vb的快
2012年07月23日 03点07分 18
level 9
就是自己写一个类似iif的函数,与vb的iif函数对比数独度
2012年07月23日 03点07分 19
level 9
手机打错字不要介意
2012年07月23日 03点07分 20
level 9
怎么没人理我
2012年07月23日 05点07分 21
话说怎么写iif函数,它的参数是个表达式呀...
2012年07月23日 05点07分
@Chino🎀 函数你会写吧?
2012年07月23日 10点07分
好像也是。。。
2012年07月23日 10点07分
@剑li_1 这个不是一般的函数。。
2012年07月23日 10点07分
1 2 尾页