|
|
Модуль для сравнения скорости работы Процедур (Функций)
Давно уже пользуюсь подобным , наглядно, и сразу видно какой из двух (3х-4х...) вариантов аналогичного кода быстрее работает.
Модуль:
Option Compare Database
Option Explicit
Private Sub SpeedCompare()
Const сlngIterations As Long = 1000000
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
For intTestNo = 1 To 4
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
Screen.MousePointer = 11
datTimerStart = Date + CDate(Timer / 86400)
For lngIteration = 1 To сlngIterations
vVal = RandomNo(1, сlngIterations)
Select Case intTestNo
Case 1
vVal = Round(vVal * 23.56, 3)
Case 2
vVal = Format(vVal * 21.33, "# ##0.00")
Case 3
vVal = Fix(vVal * 23.56)
Case 4
vVal = Int(vVal * 23.56)
End Select
Next lngIteration
datTimerEnd = Date + CDate(Timer / 86400)
strVal = ElapsedTimeStr(datTimerStart, datTimerEnd)
strVal = "Тест: " & intTestNo & " - (" & Format$(сlngIterations, "#,##0") & _
" повторов) - Продолжительность: " & strVal
If Len(strTestName) > 0 Then strVal = strVal & " - " & strTestName
Debug.Print strVal
DoEvents
Next intTestNo
Debug.Print String(100, "-")
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
Private Function ElapsedTimeStr(dmsTimeStart As Date, dmsTimeEnd As Date) As String
Dim datDiff As Date, curTotalSeconds As Currency, curVar@, intMilSec As Integer
datDiff = dmsTimeEnd - dmsTimeStart
curTotalSeconds = datDiff * 86400
curVar = curTotalSeconds - Fix(curTotalSeconds)
intMilSec = Fix(curVar * 1000)
ElapsedTimeStr = Format(datDiff, "hh:mm:ss") & "." & Format(intMilSec, "000")
End Function
Private Function RandomNo(lMinVal&, lMaxVal&) As Long
Randomize
RandomNo = Int(lMinVal + (Rnd() * lMaxVal))
End Function
|
|