Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





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

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

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

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

• реализация механизма многопоточности (multithreading). Правильное использование этого механизма в программе может повысить ее производительность, а неправильное — наоборот, замедлить. Как показывает практика, использование многопоточности эффективно применять для больших приложений, небольшие же программы начинают работать медленнее. Возможность разделения выполняемого процесса на несколько потоков заложена в архитектуре операционных систем Windows.

Многопоточность можно использовать для оптимизации программ. Необходимо помнить, что каждый поток требует дополнительных ресурсов памяти и процессора, поэтому при слабой аппаратной поддержке (медленный процессор или недостаточный объем памяти) все усилия по улучшению производительности этим методом могут оказаться неэффективными; П выделение часто повторяющихся однотипных вычислений в отдельные подпрограммы (процедуры). Очень распространенным является мнение, что использование подпрограмм всегда повышает производительность приложений, т. к. позволяет многократно применить один и тот же фрагмент кода для выполнения однотипных вычислений в разных местах программы. С точки зрения читабельности программы и понимания алгоритма работы, это действительно так. Но "с точки зрения процессора" выполнение программы по линейному алгоритму всегда (!) эффективнее, чем использование процедур. Каждый раз, когда вы используете процедуру, выполняется переход по другому адресу памяти с сохранением адреса возврата в основную программу в стеке. Это всегда вызывает замедление выполнения программы. Все сказанное не означает, что нужно отказаться от использования подпрограмм, нужно лишь разумно применять их в своих разработках.

Оптимизация с использованием языка низкого уровня ассемблера


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru