Access 2002

Значение функции Windows API


Если вы оперируете отдельными байтами строки или передаете значение функции Windows API — тогда объявляйте массив типа Byte.

Тест 16: Цикл For.Next работает быстрее Do.Loop

Если вместо цикла For. .Next использовать Do. .Loop, то работа замедлится, поскольку на каждом его шаге вам нужно увеличивать или уменьшать значение счетчика, тогда как цикл For. .Next делает это сам.

Чтобы вы могли в этом убедиться, мы включили в более медленную из наших тестовых процедур такой код:

Результат выполнения обоих циклов абсолютно одинаков, однако если сравнить их скорость, то время, потраченное на выполнение второго цикла, составляет лишь 45% от времени, потраченного первым. Конечно, далеко не всякий цикл Do. .Loop можно заменить циклом For . .Next: это возможно только тогда, когда заранее известно число его итераций, а не тогда, когда выход из цикла определяется некоторым условием. (Просмотрите также полные тестовые процедуры Testl6a и Testl6b в модуле класса OptimizingTests.)

Тест 17: Будьте аккуратны с функцией IIf()

Самый короткий код не обязательно будет самым быстрым. Хотя следующий факт упомянут в интерактивной справочной системе VBA, многие о нем забывают: выполняя функции Ilf, Choose и Switch, VBA вычисляет все передаваемые им

В запросах, формах и отчетах функция Ilf работает не так, как в VBA, — она является полным аналогом оператора If. .Then.Else. Избегать ее использования нужно только в программных модулях, где VBA ревностно вычисляет все переданные ей выражения, и из-за этого можно пропустить нежелательные побочные эффекты.

Интересно отметить, что VBA не оптимизирует вычисление логических выражений, содержащих операторы AND и OR. В других языках программирования вычисление выражения с оператором OR (например, If х OR у Then.) выполняется слева направо, и если оказывается, что первый операнд равен True, второй не вычисляется вообще: ведь и так понятно, что результатом выражения будет True.

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