Шаг 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.

step87.gif (3115 b)

Теперь наш проект можно запустить на профилирование. Выбирайте 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. Конечно это понятно. Ведь пример простой. А вот вы прогоните любой свой проект. Узнаете много интересного ;-).


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 22.01.2000