|
http://tikitak.narod.ru ---- Главная страница сайта
Шаг 87 - Профилирование
Здесь я совершенно кратко поясню возможности профилирования. Это тоже отдельная наука. Но самое гравное это то что профилированние позволяет Вам анализировать скорость выполнения отдельных процедур и тем самым искать узкие места в Вашей программе.
Создаем приложение Win32 Console с типом "Hello World" и именем проекта TestProf. Следует отметить, что при использовании нормального MFC профилирование можно использовать. Только будет менее понятнее. Мы с Вами создадим просто учебный макет. Вот учебный :-) код.
#include "stdafx.h"
void Funct1();
void Funct2();
void Funct3();
int main(int argc, char* argv[])
{
Funct1();
Funct2();
Funct3();
return 0;
}
void Funct1()
{
printf("Funct1\n");
}
void Funct2()
{
for (int x=0;x<10000;x++);
printf("Funct2\n");
}
void Funct3()
{
for (int x=0;x<30000;x++);
printf("Funct3\n");
}
Чтобы использовать профилирование необходимо установить разрешение его при компиляции. Естественно увеличится размер кода. Но при окончательной сборке вы всегда сможете убрать эту опцию. Итак Project -> Setting -> Link -> Установть Enable Profiling.
Теперь наш проект можно запустить на профилирование. Выбирайте Build -> Profile должно появиться диалоговое окно. Если его нет, то сделайте сначала Rebuild All. Сборка будет идти медленнее. В диалоговом окне устанавливаются всякие опции. Вы оставьте всё по умолчанию и нажмите OK. Запустится приложение. А в нижнем окне на вкладке Profile появится информация. Примерно такая.
Funct1
Funct2
Funct3
Profile: Function timing, sorted by time
Date: Sat Jan 22 13:55:15 2000
Program Statistics
------------------
Command line at 2000 Jan 22 13:55: "D:\PROJECT\TestProf\Debug\TestProf"
Total time: 4,790 millisecond
Time outside of functions: 3,431 millisecond
Call depth: 2
Total functions: 4
Total hits: 4
Function coverage: 100,0%
Overhead Calculated 6
Overhead Average 6
Module Statistics for testprof.exe
----------------------------------
Time in module: 1,359 millisecond
Percent of time in module: 100,0%
Functions in module: 4
Hits in module: 4
Module function coverage: 100,0%
Func Func+Child Hit
Time % Time % Count Function
---------------------------------------------------------
0,903 66,4 0,903 66,4 1 Funct3(void) (testprof.obj)
0,305 22,5 0,305 22,5 1 Funct2(void) (testprof.obj)
0,151 11,1 0,151 11,1 1 Funct1(void) (testprof.obj)
0,000 0,0 1,358 99,9 1 _main (testprof.obj)
Как видите все нормально. Скорость выполнения зависит от количества циклов for. Конечно это понятно. Ведь пример простой. А вот вы прогоните любой свой проект. Узнаете много интересного ;-).
Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|