我正在尝试优化代码的速度。我原来的代码比较两个价格,所以我使用了两倍。但是后来我想也许将它们更改为长时可能会加快该过程。但是比较两个双倍的时间似乎几乎是比较两个多角的时间的一半。为什么会这样?
将变量m,n,p长或双运行
Sub FastTest()
Dim x, y, z As Integer
Dim m, n, p As Double
'Dim m, n, p As Long
Dim StartTime As Double
StartTime = Timer()
'm = CLng(115658573)
'n = CLng(45357896)
m = 115658573
n = 45357896
For x = 1 To 1000
For y = 1 To 1000
For z = 1 To 100
If m > n Then
p = m + n
End If
Next
Next
Next
MsgBox Timer - StartTime
End Sub
每个VBA程序员都陷入了这个陷阱。在此声明中
Dim x, y, z As Integer
Dim m, n, p As Double
x,y,m,n被声明为Variant
,然后VBA将在运行时决定类型。以这种方式声明变量
Dim x As Long, y As Long, z As Long
Dim m As Double, n As Double, p As Double
然后再次运行测试,让我知道结果:)
+ 1:将整数声明为Long
。您可能认为可以使用2个字节的整数来节省内存,但这是一项兼容性功能,VBA仍会在运行时将其转换为long。
首先要明确正确的测试。
Dim m, n, p As Double
Debug.Print "m:=" & VarType(m) & " n:=" & VarType(n) & " p:=" & VarType(p)
返回:m:=0 n:=0 p:=5
Dim m, n, p As Double
m = 115658573
n = 45357896
p = m + n
Debug.Print "m:=" & VarType(m) & " n:=" & VarType(n) & " p:=" & VarType(p)
返回:m:=3 n:=3 p:=5
Dim m As Double
Dim n As Double
Dim p As Double
Debug.Print "m:=" & VarType(m) & " n:=" & VarType(n) & " p:=" & VarType(p)
返回:m:=5 n:=5 p:=5
查看VarType function以获取有关返回值的更多信息。