
- •Шеверева е.А. Лекция № 5 по дисциплине 5422 «Средства разработки офисных приложений»
- •План лекции:
- •Текст лекции
- •1 Основные принципы оптимизации кода
- •1.1 Оптимизация кода для Microsoft Excel
- •1.2 Оптимизация кода для Microsoft Word
- •2.1 Создание обработчика ошибок
- •2.2 Иерархия обработчиков ошибок
- •2.3 Тестирование обработчика за счет эмуляции ошибок
- •2.4 Строчная обработка ошибок
- •2.5 Отключение обработки ошибок
- •2.6 Общие принципы отладки
- •2.7 Режимы конструктора, выполнения и прерывания
- •2.8 Окна отладки
- •2. 9 Просмотр стека вызовов
План лекции:
1. Основные принципы оптимизации кода.
2. Отладка и обработка ошибок.
Текст лекции
Visual Basic – чрезвычайно гибкий язык программирования: одну и ту же задачу в нем можно решить несколькими способами.
1 Основные принципы оптимизации кода
Каждое обращение к свойству или методу Visual Basic требует одного или нескольких вызовов через OLE-интерфейс IDispatch. Эти вызовы занимают много времени. Поэтому лучший способ повысить быстродействие макроса – свести к минимуму число обращений к этим методам и свойствам. Поскольку для разделения компонентов в операторах Visual Basic используется точка, то отследить число обращений к методам и свойствам проще всего, просчитав количество точек.
Если необходимо неоднократно получать ссылку на один и тот же объект, то можно присвоить ссылку на него объектной переменной и в дальнейшем использовать именно ее. Тогда нет необходимости в регулярном обращении к аксессору объекта, достаточно вызвать его один раз – при установке переменной.
Код можно оптимизировать, определив объектную переменную, и тогда методы Workbooks и Sheets будут вызваны только по разу.
Оператор With позволяет исключить повторные ссылки на объекты без определения явных объектных переменных. Применение With устраняет необходимость в промежуточной переменной.
Перебор элементов набора в цикле For Each … Next осуществляется быстрее, чем в цикле с индексацией. Данный цикл уменьшает размеры макросов, облегчает чтение и отладку кода; кроме того, во многих случаях он просто удобнее.
Значение переменных считываются быстрее, чем значения свойств. Поэтому, если внутри цикла нужно значение какого-то свойства, следует присвоить это значение переменной до входа в цикл, а в самом цикле использовать уже переменную, а не свойство. Если в цикле используются аксессоры (свойства или методы, обеспечивающие доступ к объекту), желательно вынести их за пределы цикла.
Большинство аксессоров позволяет указать конкретный объект в наборе по имени или по индексу. Доступ к объекту обычно быстрее при использовании индекса. Однако доступ к объектам в наборах по именам имеет свои преимущества. Одно из них в том, что использование имен объектов упрощает код для чтения и отладки. Кроме того, ссылка на объект по имени безопаснее ссылки по индексу, так как числовое значение индекса конкретного объекта может измениться при выполнении программы.
Visual Basic тратит на обработку значений, хранимых в переменных типа Variant, больше времени, чем на обработку значений в переменных с явным типом данных. Любые математические операции, не связанные с дробными числами, выполняются значительно быстрее при использовании вместо Variant переменных типа Integer или Long. Эти же переменные предпочтительны и в качестве счетчиков в циклах For … Next.
Разрешение ссылок на объекты, их методы и свойства происходит на этапе компиляции макроса или в период его выполнения. Ссылки, разрешенные при компиляции, действуют быстрее, чем ссылки, разрешаемые при выполнении макроса. При объявлении переменных и аргументов, следует указывать конкретные объектные типы, в этом случае Visual Basic разрешает ссылки на свойства и методы соответствующих объектов еще при компиляции макроса. Кроме того, необходимо полностью квалифицировать ссылки на объекты. Это устраняет неопределенность и гарантирует, что переменная получит ожидаемый тип. Полная ссылка на объект включает имя его библиотеки. Если переменные и аргументы объявляются общим типом Object, Visual Basic откладывает разрешение ссылок на свойства и методы до того момента, когда встретит их вызов при выполнении макроса. В итоге производительность значительно падает.
Применение констант в программе увеличивает скорость ее работы. Константы вычисляются лишь раз и сохраняются в программе при компиляции кода. Переменные же могут изменяться, поэтому Visual Basic должен получать текущее значение переменной при каждом выполнении макроса. Помимо всего прочего, константы упрощают чтение и модификацию кода.
Макрос, модифицирующий внешний вид документа, работает быстрее при отключенном обновлении экрана. Обновление экрана можно оставить включенным на время отладки макроса. Чтобы отключить обновление экрана, необходимо установить свойство ScreenUpdating как False.