TopPicLogo TopPicText

Процедура сравнения скорости работы Процедур (Функций) VBA

Давно уже пользуюсь подобным , наглядно, и сразу видно какой из двух (3х-4х...) вариантов аналогичного кода быстрее работает.
Особенно хорошо помогает при обработке больших обьемов данных.


Пример отпечатает в Immediate окно (Ctrl + G в VBE - кто не знает) примерно такой результат:

---------------------------------------------------------
Тест-1 (100 000 000 повт.) работал: 00:00:02
Тест-2 (100 000 000 повт.) работал: 00:00:02
--------------------------------------------------------------


Процедура сравнения:

Private Sub esSpeedCompare()
'es 19.05.2003 - 25.03.2017 (LE)
'Процедура сравнения работы процедур или функций по скорости
'Пишет результат в Immediate окно
'--------------------------------------------------------------------
Dim intTest As Integer        'счетчик тестов
Dim lngReiterations As Long   'количество повторений теста
Dim l As Long                 'счетчик повторений
Dim t As Date                 'перменная таймера
Dim v As Variant              'для приема значений возвращаемых тестируемыми
Dim sTest$                    'На тестах может пригодиться

On Error GoTo esSpeedCompare_Err

'Установка количества повторений теста : много (считаем сразу тысячами...) - Только для быстрых
    lngReiterations = CLng(1000) * 100000

'Отделяем линией от (возможных) предидущих результатов
    Debug.Print vbCrLf & "---------------------------------------------------------"
'Запуск 2-х тестов
    For intTest = 1 To 2
        t = Now
        For l = 1 To lngReiterations
            Select Case intTest
                
                Case 1 'ниже пишем певую тестируемую процедуру|функцию
                    
                    v = l \ 3
                    
                Case 2 'ниже пишем вторую тестируемую процедуру|функцию
                    
                    v = l * 3
            
            End Select
        Next l
        
        'отчет.....
        Debug.Print "Тест-" & intTest & " (" & Format$(lngReiterations, "#,###") & _
            " повт.) работал: " & Format(Now - t, "hh:mm:ss")
    Next intTest

esSpeedCompare_Bye:
    Exit Sub

esSpeedCompare_Err:
    Debug.Print "Процедура сравнения работы функций по скорости привела к ошибке:" & vbCrLf & _
    Err.Description
    Resume esSpeedCompare_Bye
End Sub

Achtung!
Если вы не знаете, что такое VBE, и слабо понимаете отличие Прцедуры от Функции, или ваша БД меньше 100 000 записей ...
ЭТО вам пока не нужно!

Назад ToTop
L.E. 26.03.2017
Рейтинг@Mail.ru