Додати у проект клас Log. У програмі викликати методи класу для вионання кожно кроку виконання програми. Переглянути створений класом Log файл.
Лекція №5
Тема: Профілювання та оптимізація програмних продуктів.
Мета: Придбати знання з виконання технологічних процесів по профілювання та оптимізації програмних продуктів.
Перелік питань, що розглядаються на лекції:
1. Призначення та функції профілювання.
2. Профілювальник.
3. Мета й завдання профілюваьника.
4. Загальна година виконання.
5. Питомна година виконання.
6. Інформація про пенальті.
7. Проблеми профілювання.
Відповідно до правила "10/90", десять відсотків коду "з'їдають" дев'яносто відсотків продуктивності системи. Якщо година, витрачений на виконання кожної машинної інструкції, зобразити графічно в порядку зростання їхнього лінійного адресі, на отриманій діаграмі мі виявимо кілька височенних піків, що піднімаються над практично порожньою рівниною, засіяної безліччю низеньких горбків, ці самі піки — і є "гарячі" крапки.
Чому "температура" різних ділянок програми настільки неоднакова? Причина в тім, що переважлива більшість обчислювальних алгоритмів чи так інакше зводяться до циклів, — тобто багаторазовим повторенням одного фрагмента коду, причому найчастіше циклі обробляються не послідовно, а утворять більш-менш глибокі ієрархії. У результаті, велику частину всього години виконання, програма проводити в циклах з найбільшим рівнем вкладення, і саме їхня оптимізація дає найкращий приріст продуктивності!
Громіздкі й гальмові, алі рідко викликувані функції оптимізувати немає ні якого сенсу, — це практично не збільшить швидкодії додатка (ну хіба що тільки в тому випадку, якщо смороду зовсім вуж будуть "криво" написані).
Коли ж алгоритм програми простий, а її вихідний текст вільно вміщається в сотню-іншу рядків, те "гарячі" крапки неважко виявити й візуальним переглядом лістингу. Алі зі збільшенням обсягу коду це стає вусі складніше й складніше. У програмі, що складається з тисяч складно взаємодіючих один з одним функцій (частина з яких це функції зовнішніх бібліотек і API — Application Programming Interface, інтерфейс прикладного програмування — операційної системи) далеко не так очевидно: яка ж саме з їх найбільшою мірою відповідальна за низьку продуктивність додатка. Природний вихід — вдатися до допомоги спеціалізованих програмних засобів.
Профіліровщик (так саме називаний "профайлером") — основний інструмент оптимізатора програм. Оптимізація "у сліпу" рідко дає гарний результат. Згадайте прислів'я "самий повільний верблюд визначає швидкість каравану"? Програмний код поводитися повністю відповідає цьому, і продуктивність додатка визначається самою вузькою його ділянкою. Буває, що винуватницею виявляється одна-єдина машинна інструкція (наприклад, інструкція розподілу, що багаторазово виконується в глибоко вкладеному циклі). Програміст, затративши воістину титанічні зусилля на поліпшення іншого коду, виявиться пребагато здивований, що продуктивність додатка чи навряд зросла відсотків на десять-п'ятнадцять.
Правило номер один: ліквідація не самих "гарячих" крапок програми, практично не збільшує її швидкодії. Дійсно, скільки не підганяй іншого позад верблюда — від цього караван швидше йти не буде (випадок, коли передостанньої верблюд гальмує останнього — це вже тема іншої розмови, що вимагає глибоких знань техніки профілювання, а тому й не розглянута в поданому матеріалі).