ГлавнаяMS ACCESS Класс для "замера" времени исполнения запроса, процедуры и т.п.
Класс для "замера" времени исполнения запроса, процедуры и т.п.
Автор Владимир Лаврушкин (Д.Ф.)
10.09.2002 г.
Заканчиваю сейчас большой проект, в работе над которым столкнулся с необходимостью проведения огромного количества экспериментов по выбору наилучших подходов к организации запросов, расчетных подпрограмм и т.п. Для "замера" времени исполнения написал небольшой класс cls_time. Очень помогает!
Option Compare Database Option Explicit Private Declare Function apiTimeGetTime Lib "winmm.dll" Alias "timeGetTime" () As Long Private tstart As Long Private tend As Long
Private Function pdt(t As Long, Optional titul = " :") As String 'Функция преобразования кол-ва миллисекунд в строку вида "0 час. 30 мин. 45 сек." Dim tsec As Double Dim th As Currency Dim tcs As Currency Dim tm As Currency Dim ts As Currency 'секунд tcs = t / 1000 '+ (t / 1000) - (t 1000) / 100 * 60 'целых часов th = tcs 360 'целых минут tm = (tcs - th * 360) 60 'остаток секунд за минутами ts = tcs - th * 360 - tm * 60 pdt = titul _ + CStr(th) + " час. " _ + CStr(tm) + " мин. " _ + CStr(ts) + " сек. " End Function Public Sub start() 'Запуск отсчета времени tstart = apiTimeGetTime End Sub Public Sub finish() 'остановка отсчета времени tend = apiTimeGetTime End Sub Public Function printstart(Optional titul = "") As String 'возвращает время начала отсчета 'Внимание!!! возвращает время прошедшее с момента запуска Windows printstart = pdt(tstart, titul) End Function Public Function printfinish(Optional titul = "") As String 'возвращает время окончания отсчета 'Внимание!!! возвращает время прошедшее с момента запуска Windows printfinish = pdt(tend, titul) End Function Public Function printdeltatall(Optional titul = "") As String 'возвращает время от начала до окончания отсчета printdeltatall = pdt(tend - tstart, titul) End Function Public Function printdeltat(Optional titul = "") As String 'возвращает время от начала отсчета до настоящего момента 'удобно для вывода промежуточных замеров printdeltat = pdt(apiTimeGetTime - tstart, titul) End Function
Что с этим делать? 1. Создать модуль класса cls_time 2. Скопировать все выше написанное в этот модуль 3. Вызывать примерно так :
'Пример вызова Public Sub test_cls_time() 'Объявления Dim dt As cls_time Set dt = New cls_time 'старт dt.start ''''''' For i = 1 To 500 X = Sin(i) * Cos(i) 'вывод с накоплением Debug.Print dt.printdeltat("t= ") '''''''''''''''''''' Next 'финиш dt.finish '''''' 'Результаты Debug.Print vbCr, dt.printstart("Begin - "), vbCr, dt.printfinish("End - "), vbCrLf, dt.printdeltatall("Total = ") 'Можно, например так MsgBox dt.printdeltatall("Total = "), vbInformation, "Время.." 'Или так на форме DoEvents 'вставлено, если надо выводить промежуточные рез-ты Me.Caption = dt.printdeltatall("Total = ")