Access 2002

Цикл For.Next      


Если для чтения данных из массива можно использовать любой из двух циклов For, то запись в массив может быть выполнена только в цикле For.Next. Дело в том, что цикл For Each.Next работает с копией массива, а не с ним самим. Поэтому, хотя запись данных в массив в цикле For Each.Next и не вызовет ошибки времени выполнения, данные в массив не попадут. Не забывайте об этой важной особенности функционирования циклов For.

Тест 22: Цикл For Each.Next обрабатывает коллекции намного быстрее, чем цикл For.Next

Так же, как и элементы массивов, элементы коллекций можно перебирать двумя способами. Однако разница в скорости в данном случае значительно больше: для коллекции время выполнения цикла For Each. Next составляет всего 2% от времени выполнения цикла For. Next. (Просмотрите также полные тестовые процедуры Test22a и Test22b в модуле класса OptimizingTests.)

Если вам нужно перебрать элементы коллекции в любом порядке, отличном от естественного (то есть от того, в котором элементы добавлялись в коллекцию), выбор у вас отсутствует: только цикл For.Next. У более быстрого цикла For Each.Next нет опций, позволяющих управлять порядком его выполнения.

Тест 23: Не удаляйте элементы из коллекции для ее очистки

Если вы пользуетесь объектом VBA Collection, в один прекрасный момент вам может потребоваться его очистить. Первое, что приходит на ум, это просто по очереди удалить из коллекции все элементы. Однако для удаления элемента нужно задать либо его индекс, либо ключевое значение (как того требует метод Remove). Если действовать с помощью индексов, придется организовать цикл от конца коллекции к началу, чтобы индексы остающихся в коллекции элементов не менялись. Выглядеть он будет примерно так:

Присваивая переменной col значение New Collection, вы просите VBA освободить ссылку на исходную коллекцию (а раз не останется переменной, которая бы на нее ссылалась, то и сама коллекция будет удалена из памяти) и присвоить переменной col ссылку на новый, пустой объект Collection.

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