我正在尝试优化代码速度。我原来的代码比较两个价格,所以我使用了两倍。但是后来我想也许将它们更改为长时可能会加快该过程。但是比较两个双倍的时间似乎几乎是比较两个多角的时间的一半。为什么会这样?
将变量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
答案 0 :(得分:2)
每个VBA程序员都会陷入这个陷阱。在此声明中
def save(self, *args, **kwargs):
#Code here
if self.courses = "ABM":
self.x = Model2.objects.get(id=x) #Whatever code you want
super(model_name, self).save(*args, **kwargs)
x,y,m,n声明为Dim x, y, z As Integer
Dim m, n, p As Double
,然后VBA将在运行时决定类型。以这种方式声明变量
Variant
再次运行测试,让我知道结果:)
+1:将整数声明为Dim x As Long, y As Long, z As Long
Dim m As Double, n As Double, p As Double
。您可能认为可以使用2个字节的整数来节省内存,但这是一项兼容性功能,VBA仍会在运行时将其转换为long。
答案 1 :(得分:0)
首先要进行明确正确的测试。
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,以获取有关返回值的更多信息。