Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 2....doc
Скачиваний:
78
Добавлен:
17.12.2018
Размер:
1.62 Mб
Скачать

Функция Timer и хронометраж вычислений

Функция Timer возвращает значение типа Single, представляющее число секунд, прошедших после полуночи. Эта функция широко используется при проведении хронометража вычислений в программах. Чтобы повысить эффективность выполнения VBA программ зачастую приходится прибегать к проведению хронометража, чтобы выявить наиболее критичные по времени выполнения участки программ, а затем уже применять специальные меры для ускорения вычислений. Приведем сейчас пример, в котором анализируется время, затрачиваемое для выполнения операций над арифметическими данными разных подтипов.

Public Sub Speed()

'Эта программа выполняет замеры времени вычислений над данными разного типа

Dim Start As Single, Finish As Single

Dim i As Long, j As Long

Dim bx As Byte, by As Byte, bz As Byte

Dim ix As Integer, iy As Integer, iz As Integer

Dim lx As Long, ly As Long, lz As Long

Dim sx As Single, sy As Single, sz As Single

Dim dx As Double, dy As Double, dz As Double

For i = 1 To 5 'Внешний цикл для повторения замеров времени

Start = Timer

For j = 1 To 100000

bx = 99: by = 101

bz = by * (by - bx) \ by

Next j

Finish = Timer

Debug.Print "Тип Byte: Время ", i, " = ", Finish - Start

Debug.Print "bz = ", bz

Start = Timer

For j = 1 To 100000

ix = 99: iy = 101

iz = iy * (iy - ix) \ iy

Next j

Finish = Timer

Debug.Print "Тип Integer: Время ", i, " = ", Finish - Start

Debug.Print "iz = ", iz

Start = Timer

For j = 1 To 100000

lx = 99: ly = 101

lz = ly * (ly - lx) \ ly

Next j

Finish = Timer

Debug.Print "Тип Long: Время ", i, " = ", Finish - Start

Debug.Print "lz = ", lz

Start = Timer

For j = 1 To 100000

sx = 99: sy = 101

sz = sy * (sy - sx) / sy

Next j

Finish = Timer

Debug.Print "Тип Single: Время ", i, " = ", Finish - Start

Debug.Print "sz = ", sz

Start = Timer

For j = 1 To 100000

dx = 99: dy = 101

dz = dy * (dy - dx) / dy

Next j

Finish = Timer

Debug.Print "Тип Double: Время ", i, " = ", Finish - Start

Debug.Print "dz = ", dz

Next i

End Sub

Пример 8.7. (html, txt)

Представим результаты вычислений в виде таблицы. Они представляют интерес сами по себе. Заметьте, что наибольшее время потребовалось для вычислений над самым коротким типом - Byte, а в целом вычисления над разными типами выполняются примерно с одинаковой скоростью.

Таблица 8.5. Время вычислений над данными разных типов

Тип / Номер Эксперимента

1

2

3

4

5

Byte

0.3515625

0.359375

0.3320313

0.3320313

0.34375

Integer

0.2421875

0.2382813

0.2421875

0.2421875

0.2382813

Long

0.2890625

0.28125

0.28125

0.28125

0.28125

Single

0.2929688

0.2695313

0.28125

0.28125

0.28125

Double

0.3085938

0.2890625

0.2929688

0.2929688

0.28125