Access. Программирование на VBA

О происходящем "за кулисами”


Хотя определение времени играет не последнюю роль, но только на основе этой информации невоз­можно судить о производительности приложения во время разработки. Скорее всего, разработка проис­ходит. на высокоскоростном компьютере, и тестирование производится на небольшом наборе тестовых данных, который наверняка меньше набора, используемого настоящим приложением. Более того, таймер не может сообщить, как будет выполняться приложение на другом компьютере с меньшим объемом памяти или более низкоскоростным диском. Для более точного наблюдения за приложением можно воспользо­ваться другой недокументированной функцией — ISAMStats. Функция ISAMStats не документирована и не поддерживается, поэтому информацию, которую она сообщает, можно использовать лишь в качестве общих указаний. При запуске функция производит измерение шести важных оказывающих влияние на про­изводительность операций. Она подсчитывает все обращения чтения и записи на диск, обращения чтения в кэше, опережающего чтения, размещения блокировок и освобождения блокировок. Данную функцию можно использовать в Access 2000 и предыдущих версиях Access. Синтаксис функции очень простой:

DBEngine.ISAMStats(опция,[reset])

Существует шесть возможных значений для аргумента опция:

Значение аргумента опция

Описание

0

1

2



3

4

5

Запись на диск

Чтение с диска

Чтение из КЭШа

Чтение из кэша (опережающее чтение)

Размещение блокировки

Освобождение блокировки

Необязательный параметр переустановки позволяет переустановить отдельные счетчики на нулевое значение. Чтобы воспользоваться данной функцией для оценки производительности, необходимо либо вычесть одни показания из предыдущих, либо переустановить счетчик на нулевое значение и затем вы-поднять оценку. В листинге 2 приведен один из способов использования функции ISAMStats

для оценки производительности.

Листинг 2. Один из способов использования ISAMStats

для оценки производительности.

Sub PrintStats()

Dim i As Integer

Debug.Print




Debug.Print "Disk Reads:  " & ISAMStats (0, Falsa)

Debug.Print "Disk Writes:  " & ISAMStats(1, False)

Debug.Print "Cache Reads:  " & ISAMStats(2, False)

Debug.Print "Read-Ahead Cache Reads:  " & ISAMStats(3, False)

Debug.Print "Locks Placed:  " & ISAMStats(4, False)

Debug.Print "Locks Released: " & ISAMStats(5, False)

For i = 0 To 6

ISAMStats i, True

Next

End Sub

PrintStats может дать некоторое представление о том, почему одна методика работает быстрее, чем другая. Кроме того, эта информация может помочь сделать выбор между двумя подходами, выполнение которых занимает одинаковый промежуток времени. Взглянув на полученные данные, можно определить, как разная аппаратная конфигурация или больший набор данных может повлиять на производительность того или иного подхода.

Функции A2KU_TimeClock и PrintStats

полезны только при сравнении одной методики с другой. Бо­лее того, надежные результаты можно получить лишь в том случае, если усреднить данные многих тес­тов, проведенных при разных условиях. Данные две функции можно с легкостью объединить в одну для проведения подобных повторяющихся тестов.

Далее в статье приведен пример использования этих функций для сравнения двух различных методик.


Содержание раздела