Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Оптимизация приложений




Циклы

Строковые операции

Математические операции

  • При работе с целыми используйте целочисленные операции, - деление нацело, взятие остатка и другие, не выводящие за пределы целых чисел.
  • В выражениях, где одновременно присутствуют целые числа и числа с плавающей точкой перед проведением операций всегда происходит преобразование к типам с плавающей точкой Single и Double. Для уменьшения подобных преобразований, записывайте выражения так, чтобы пересечение переменных целого и плавающего типа было, по возможности, минимальным.
  • При работе со строками используйте введенные в Office 2000 функции Replace, функции разбора строки и другие. Ранее мы подробно рассказали об их достоинствах.
  • Избегайте, по возможности, использования конкатенации. Используйте Replace в большинстве случаев. В тех случаях, когда заменяется одна подстрока на другую такой же размерности, можно использовать функцию Mid, как в следующем примере:
· Public Sub TestCode()· Dim Text As String· Text = "Компилятор кода"· Mid(Text, 1, 5) = "Транс"· Debug.Print Text· End Sub
  • Строковые константы VBA могут сократить время вычислений, позволяя избежать вызовов функций. Так, например, эффективнее использовать константу vbCrLf, чем комбинацию символов Chr(13), Chr(10), задающих возврат каретки и перевод строки.
  • Иногда медленные операции над строками можно изменить на операции работы с их кодами. Код
· If Asc(Text) = 202

работает быстрее, чем код

If Left(Text,1) = "K"

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

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

  • Все вычисления, которые могут быть сделаны вне цикла, должны быть вынесены из него.
  • Предусматривайте возможность досрочного завершения цикла, когда решение задачи уже получено.
  • Аккуратно работайте в цикле с элементами массивов. Старайтесь избегать лишнего вычисления индексных выражений и обращений к элементам массива. Часто введение дополнительных переменных позволяет существенно ускорить работу с элементами массивов.
  • При работе с коллекциями объектов Office 2000 используйте цикл For Each вместо обычного цикла For. В большинстве случаев это приводит к существенному выигрышу во времени исполнения цикла.

Завершая эту лекцию, хочу еще раз сказать, что главная оптимизация достигается на уровне проектных решений, выбора структуры данных и алгоритмов. К ниже перечисленным советам следует относиться с определенной осторожностью. Оптимизация не должна идти во вред ясности написания программ. Не всегда в ней есть необходимость. Но если такая необходимость возникает, то, в первую очередь, нужно выявить узкие места в программе и их, в основном, и оптимизировать.

Целью любой разработки является создание максимально эффективного приложения. Однако часто некоторые параметры приложений могут быть противоречивыми (например, размер приложения и скорость его работы), и требуется подобрать оптимальное решение для их реализации в проекте. Поиск реализации эффективно работающего приложения в условиях противоречий и ограничений и есть оптимизация.

Как правило, целью оптимизации является создание приложения, выполняющего все поставленные перед ним функциональные задачи максимально быстро и при этом с использованием минимального количества ресурсов системы, в частности места на диске и памяти компьютера при загрузке приложения. Перед проведением оптимизации необходимо ясно представлять, какие параметры являются более важными: скорость или ресурсы. Оптимизация приложения, таким образом, это целая стратегия создания эффективного приложения.

Рассмотрим оптимизацию приложения, включающую в себя следующие основные разделы:

  • оптимизацию скорости выполнения приложением вычислений и других действии, измеряемых временем;
  • оптимизацию размера приложения;
  • оптимизацию размера графики приложения.

Конечно, это далеко не полный список, но главные направления оптимизации он отражает.

Перед тем как строить стратегию оптимизации, рекомендуется ответить на следующие три вопроса:

  • Что оптимизировать?
  • Где оптимизировать?
  • Когда завершить оптимизацию?

Отвечая на первый вопрос, необходимо выделить цели оптимизации. Например, приложение для расчета заработной платы должно работать максимально быстро, при этом можно пожертвовать его размером. Наоборот, создавая приложение для Internet, необходимо помнить, что проект большого размера не будет работать в сети Internet, т. к. исполняемый файл приложения размером 1 Мбайт и более практически неработоспособен в сети.

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

Третий вопрос подразумевает, что оптимизацию не следует проводить до бесконечности, если существуют ограничения, не связанные с работой кода приложения. Некоторые параметры приложения могут прямо зависеть от параметров системы: скорости работы диска или сети. Поэтому следует вовремя остановиться в оптимизации параметров приложения, когда ее результат уже в малой степени зависит от приложения. Например, при работе с диском таким ограничением будет скорость выполнения операций записи/чтения данных с диска.

Оптимизация скорости работы приложения

Основной способ оптимизации скорости работы — это оптимизация кода приложения. При этом желательно прислушаться к рекомендациям разработчиков Visual Basic 6.

  • Избегайте переменных типа variant и присваивайте соответствующие их применению типы. При использовании в выражениях переменных типа Variant теряется время на их приведение к конкретному типу в соответствии с типом выражения. Причем, необходимо иметь в виду, что при множественном описании ключевые слова As Type относятся только к одной переменной, то есть Dim А, в, с As String означает, что А и В— переменные типа variant (по умолчанию) и только с — строковая. В этом случае лучше написать Dim A As string, в As String, с As string.
  • Используйте для арифметических вычислений переменные типа Long или Integer, поскольку они, в отличие от currency, single или Double, более всего соответствуют машинному коду. В табл. 10.4 приведено ранжирование по относительной скорости типов переменных при арифметических вычислениях.

Таблица 10.4. Относительная скорость вычисления для типов переменных

Тип переменной Относительная скорость
Long Самая высокая скорость
Integer Ниже чем у Long
Byte Ниже чем у Integer
Single Ниже чем у Byte
Double Ниже чем у Single
Currency Самая низкая скорость
  • Назначайте часто используемое свойство объекта в переменные, так как назначение и чтение переменных работает быстрее (от 10 до 20 раз). Для сравнения приведены два примера с двумя вариантами текста кода, при этом второй вариант кода более быстрый, чем первый, и в том и в другом примере.

1. Первый пример.

Первый вариант кода:

For nCounter = 1 То 20

Object(nCounter).Property = ObjectDef.Property

Next nCounter

Второй вариант кода:

valProperty = ObjectDef.Property For nCounter = 1 To 20

Object(nCounter).Property = valProperty

Next nCounter

2. Второй пример.

Первый вариант кода:

For nCounter = 1 То 20

Object.Property = Object.Property & sValue

Next nCounter

Второй вариант кода:

For nCounter = 1 To 20

sValueAll = sValueAll & sValue

Next nCounter

Object.Property = sValueAll

  • Для хранения одинаковых значений в процедурах вместо переменных типа Static используйте переменные уровня модуля, поскольку они работают быстрее.При этом, правда, текст кода приложения увеличивается за счет дублирования и становится менее читабельным и понятным.
  • Для критичных по времени вычисления случаев используйте код процедур непосредственно в месте их выполнения взамен вызова этих процедур, который занимает определенное время. Правда при этом необходимо помнить, что размер кода увеличивается за счет дублирования кода процедур.
  • Вместо переменных, насколько это возможно, используйте константы, поскольку значения констант включаются при компиляции в код приложения, а переменные каждый раз должны быть найдены в памяти и считаны, что, конечно, занимает определенное время.

Замечание

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

Оптимизация размера приложения

При оптимизации размера приложения под размером будем понимать как размер исполняемого файла, так и размер загруженного в память приложения. Особенно критичным размер является для приложений, работающих в сети Internet. Поэтому такие приложения следует делать как можно меньшего размера. Если это не получается, можно разделить большое приложение на несколько небольших, которые будут выполнять законченные функции и загружаться по мере необходимости.

Частичную оптимизацию размера кода выполняет сам Visual Basic 6. При компиляции приложения в исполняемый файл пустые строки и строки комментариев пропускаются, поэтому на них можно не экономить. В том числе можно не экономить на длине имен идентификаторов, которые также оптимизируются компилятором.

Для оптимизации размера кода подойдут такие основные рекомендации:

  • уменьшайте количество загруженных форм. Для форм, которые закрываются, применяйте оператор: set Form = Nothing;
  • уменьшайте в формах, насколько это возможно, количество элементов управления. При этом лучше пользоваться массивами элементов управления;
  • для вывода тестовых значений максимально используйте объекты Label
  • вместо TextBox;
  • для хранения данных используйте файл ресурсов и загружайте данные только при необходимости;
  • избегайте переменных типа variant, требующих 16 байт для хранения. Для сравнения переменные типа integer требуют 2 байта, переменные типа Double — 8 байт;
  • избегайте "мертвого" кода — то есть процедур и переменных, которые когда-то требовались, но в настоящее время не используются. Их надо удалить или закомментировать.

Оптимизация размера графики приложения

Графика занимает существенный размер приложения, поэтому важно использовать ее оптимально. Для этого подходят такие рекомендации:

  • для вывода изображений используйте элемент управления типа image, а не Picture, поскольку последний имеет атрибуты окна и, соответственно требует больше ресурсов;
  • загружайте изображения только при необходимости, а не храните их в элементах управления;
  • если необходимость присутствия изображения не требуется, назначайте свойству Picture объектов значение Nothing: Set Object. Picture = Nothing.

Замечание

Приведенный здесь список не содержит всевозможные рекомендации и приемы оптимизации приложений. В этом вопросе помощь вам может оказать только большая практика работы с Visual Basic 6, поскольку создание оптимальных приложений сродни мастерству, оттачиваемому разработкой приложений для Visual Basic 6.





Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 1953; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.