概述
用if
做判斷時,數據類型對速度的影響有多大?是否值得添加修改類型的代碼?
測試速度的代碼
Private Declare Function QueryPerformanceCounter Lib "KERNEL32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "KERNEL32" (lpFrequency As Currency) As Long
Private m_Frequency As Currency
Private m_Start As Currency
Private m_Now As Currency
Private m_Available As Boolean
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByVal Source As Any, ByVal Length As Long)
Sub asdf()
Dim i As Long
For i = 1 To 1000 Step 1
a = a & Chr(Int((90 - 65 + 1) * Rnd + 65))
Next i
Cells(1, 1) = a
Debug.Print a
End Sub
Sub bb()
m_Available = (QueryPerformanceFrequency(m_Frequency) <> 0)
If Not m_Available Then
Debug.Print "Performance Counter not available"
End If
Dim a As Long, b As Long
a = 231312
b = 234324
Dim c As String, d As String
c = "as"
d = "er"
Dim e As String, f As String
e = "er"
f = "erf"
Dim i As Long
QueryPerformanceCounter m_Start
For i = 1 To 1000000 Step 1
' 以下三個 if 選一個執行
If a = b Then
End If
If c = d Then
End If
If e = f Then
End If
Next i
QueryPerformanceCounter m_Now
Elapsed = 1000 * (m_Now - m_Start) / m_Frequency
Debug.Print Format(Elapsed, "#.0000")
End Sub
測試結果
測試結果的時間單位是毫秒。
測試序號 | long型 | 長度相同的string型 | 長度不同的string型 |
---|---|---|---|
1 | 10.4342 | 40.8870 | 40.6155 |
2 | 10.4964 | 40.9349 | 41.5193 |
3 | 10.5122 | 40.9706 | 41.3557 |
4 | 10.5648 | 40.9775 | 40.9318 |
5 | 10.5694 | 41.0120 | 40.9654 |
6 | 10.5968 | 41.0207 | 40.6002 |
7 | 10.6139 | 41.0804 | 41.3952 |
8 | 10.6167 | 41.1190 | 41.0636 |
9 | 10.6624 | 41.1336 | 40.8099 |
10 | 10.6886 | 41.1607 | 40.8892 |
結論
和數值相比,字符串比較慢太多,多以完全值得花費時間來優化代碼,把參與不二運算的數據類型做成數值。