КГ_8глава (1024123), страница 3
Текст из файла (страница 3)
Приведем текст третьего варианта программы (studex36) только для оптимизированных функций. Другие функции остались без изменений.
Часть файла studex36.cpp:
В результате второго шага оптимизации программа осуществляет полный цикл вывода многогранников за 49 секунд (вместо 73 для предыдущего варианта). Замена типов double на float дает немного — где-то одну-две секунды. Повышения скорости в основном достигнуто за счет усовершенствования
функции MyLineHor и включения кода записи пикселов DIB в тело функции setPixMyZ. Функция SetPixRastrMem ликвидирована (ее делать inline не имеет смысла).
Восстановим работу программы в полном объеме — разблокируем sphere:: Draw и сделаем измерения времени. Полный цикл рисования составляет 65 секунд (предыдущий вариант был 88 секунд).
Таким образом, мы прошли два шага от первого варианта (studex34) и уменьшили время графического вывода от 807 до 65 секунд — то есть более! чем в 12 раз. Оптимизировать можно бесконечно любую программу, в том числе и последний вариант. Например, использовать ассемблер для программирования некоторых критических функций. Однако это тема уже для другого разговора...
Главное, что здесь желательно увидеть, — мы находились в рамках только одной технологии создания графических программ (программирование на основе функций API Windows), хотя результаты программирования могут существенно отличаться.
Подобная методика анализа может использоваться не только для графических программ.