|
|
Модуль для сравнения скорости работы Процедур (Функций)
Давно уже пользуюсь подобным , наглядно, и сразу видно какой из двух (3х-4х...) вариантов аналогичного кода быстрее работает.
Модуль:
Option Compare Database
Option Explicit
Private Sub SpeedCompare()
Const сiTotTests As Integer = 4
Const сlngIterations As Long = 1000000
Const iMaxLen As Integer = 55
Dim intTestNo As Integer
Dim lngIteration As Long
Dim strTestName As String
Dim datTimerStart As Date
Dim datTimerEnd As Date
Dim vVal, strVal$
On Error GoTo SpeedCompare_Err
Screen.MousePointer = 11
For intTestNo = 1 To сiTotTests
Select Case intTestNo
Case 1: strTestName = "Round() Function"
Case 2: strTestName = "Format() Function"
Case 3: strTestName = "Fix() Function"
Case 4: strTestName = "Int() Function"
End Select
datTimerStart = Date + CDate(Timer / 86400)
For lngIteration = 1 To сlngIterations
Select Case intTestNo
Case 1
vVal = Round(lngIteration * 23.56, 3)
Case 2
vVal = Format(lngIteration * 21.33, "# ##0.00")
Case 3
vVal = Fix(lngIteration * 23.56)
Case 4
vVal = Int(lngIteration * 23.56)
End Select
Next lngIteration
datTimerEnd = Date + CDate(Timer / 86400)
vVal = ElapsedTimeStr(datTimerStart, datTimerEnd)
If intTestNo = 1 Then
strVal = "Тест из " & Format$(сlngIterations, "#,##0") & " повторов:" & vbCrLf
Else
strVal = ""
End If
strVal = strVal & Format(intTestNo, "00") & ". "
strVal = strVal & strTestName & String(iMaxLen - Len(strTestName), ".")
strVal = strVal & " Продолжительность: " & vVal
Debug.Print strVal
Next intTestNo
DoEvents
Debug.Print String(90, "-") & "/"
SpeedCompare_End:
Screen.MousePointer = 1
Exit Sub
SpeedCompare_Err:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Sub :" & _
"SpeedCompare - mod01SpeedTest.", vbCritical, "Error!"
Resume SpeedCompare_End
End Sub
|
|