Access 2002

Выражения с оператором AND


Так же вычисляются и выражения с оператором AND (например, If х AND у Then.): если оказывается, что первый операнд равен False, второй не вычисляется вообще, поскольку результат заведомо равен False. Однако не рассчитывайте на такое же поведение VBA: чтобы избежать ошибок времени выполнения, он всегда вычисляет оба операнда логического выражения и только после этого определяет результат.

Тест 19: Не вызывайте DoEvents на каждом шаге цикла

Если в вашей программе выполняется цикл, который лишь производит вычисления, не вызывая никаких функций VBA, вы обнаружите, что такой цикл связывает Access, не позволяя ей реагировать на действия пользователя или обновлять экран. Стандартное решение этой проблемы таково: вы помещаете внутрь цикла вызов функции VBA DoEvents, и он дает Access время обновить экран, отреагировать на щелчки кнопками мыши или нажатия клавиш либо выполнить другие фоновые задания. Казалось бы, все прекрасно.

Но, к сожалению, функция DoEvents просто прерывает выполнение кода и не позволяет ему продолжить работу до тех пор, пока ожидающие в очереди события Windows не будут обработаны Access. Если вызывать эту функцию на каждом шаге цикла, выполнение кода сильно замедлится. Мы сравнили время выполнения двух процедур. В первой из них DoEvents вызывалась на каждом шаге цикла:

Даже это незначительное изменение ускорило выполнение цикла в 10 раз. Оно и понятно: наш цикл ничего, кроме вызова функции DoEvents, не делает. Но даже если внутри цикла содержится некоторое количество программного кода, его выполнение, скорее всего, не будет занимать столько времени, сколько отнимает вызов функции DoEvents. Так что, сократив частоту вызовов этой функции, вы все равно получите огромный выигрыш. (Просмотрите также полные тестовые процедуры Testl9a и Testl9b в модуле класса OptimizingTests.)

Комментарии закрыты