在做循环的时候
----------------------------------------------
'直接使用
A:
Dim array(10000) as varient
for i=0 to ubound(array)
debug.print "000000000000000"
next
----------------------------------------------
'赋值再使用
B:
Dim array(10000) as varient
y=ubound(array)
for i=0 to y
debug.print "000000000000000"
next
-------------数组很大的时候,A和B的效率居然会不一样,B的效率要高于A的效率,为什么???
在我看来,Ubound不关是A还是B,都只是执行了一次,作为定值来使用的。
请各位赐教!
----------------------------------------------
'直接使用
A:
Dim array(10000) as varient
for i=0 to ubound(array)
debug.print "000000000000000"
next
----------------------------------------------
'赋值再使用
B:
Dim array(10000) as varient
y=ubound(array)
for i=0 to y
debug.print "000000000000000"
next
-------------数组很大的时候,A和B的效率居然会不一样,B的效率要高于A的效率,为什么???
在我看来,Ubound不关是A还是B,都只是执行了一次,作为定值来使用的。
请各位赐教!
c语言中for的用法是
for(i=0;i<ubound(array);i++){...}
fncUbound=ubound(array)'此行设置断点
end funciton把楼顶的代码修改为
----------------------------------------------
'直接使用
A:
Dim array(10000) as varient
for i=0 to fncUbound(array)
debug.print "000000000000000"
next
----------------------------------------------
'赋值再使用
B:
Dim array(10000) as varient
y=fncUbound(array)
for i=0 to y
debug.print "000000000000000"
next
-------------
设置断点后,
不论是A还是B,
程序只进入一次断点。而没出现反复进入断点的情况。
这该如何解释??
我现在的机器没有VB环境,写不了太详细。大概是这样的!
------------------------------------------
Dim time1 as Date
Dim time2 as Date
Dim time3 as Date
Dim time4 as Date
Dim array(10000) as varienttime1=Now
for i=0 to fncUbound(array)
debug.print "000000000000000"
next
time2=Now
time3=Now
y=fncUbound(array)
for i=0 to y
debug.print "000000000000000"
next
time4=Now
debug.print "case 1:" & (time2-time1)
debug.print "case 2:" & (time4-time3)--------------------------------------
结果相差有1秒!
for i=0 to y
之后,y的值已被放入寄存器,执行循环和y比较的时候,都是直接从寄存器读取数据,也就是说在for i=0 to y这个循环中y只用到了一次,比较明显的例证是在循环体中改变y的值,并不会改变循环体执行的次数:
Dim i As Long
Dim j As Long
j = 10
For i = 1 To j
j = 4*i
Debug.Print "line " + CStr(j)
Next
case 1:8.10185229056515E-05
case 2:8.10185156296939E-05