Оптимизация программного кода с использованием Turbo Profiler. Создание аннотированного листинга исходного текста программы, страница 2

Второе изменение:

Из данных профиля мы видим, что неэффективными являются строки с номерами 44, 46, 34, эти строки используют библиотеку «stdio.h» которая обращается к файлу STDOUT.

Изменим   44, 46 и 34 строки

if(c[j]==i) printf("%d ", j);

printf("изолированные страны состоят из вершин:\n");

printf("\n");

на

if(c[j]==i) сprintf("%d ", j);

сprintf("изолированные страны состоят из вершин:\n");

сprintf("\n");

Статистические данные после второго изменения программы (msis2-2.cpp):

Turbo Profiler  Version 2.1  Tue Oct 31 21:48:52 2006

Program: H:\KNASTU\Њ‘€‘\LAB2\MSIS2-2.EXE

Execution Profile

Total time: 0.0135 sec

% of total: 48 %

Run: 15 of 15

Filter: All

Show: Time and counts

Sort: Frequency       Pass count: +++   Time: ***

#MSIS2-2#22            2850  46% |++++++++++++++++++++++++++++++++++++++++++++++

0.0025 sec  37% |*************************************

#MSIS2-2#44            1500  24% |++++++++++++++++++++++++

0.0014 sec  20% |********************

#MSIS2-2#46             150   2% |++

0.0002 sec   3% |***

#MSIS2-3#20             285   4% |++++

0.0002 sec   3% |***

recurs                  285   4% |++++

0.0002 sec   3% |***

#MSIS2-3#37             150   2% |++

0.0002 sec   3% |***

#MSIS2-3#28             285   4% |++++

0.0002 sec   3% |***

#MSIS2-3#25             135   2% |++

0.0001 sec   2% |**

#MSIS2-3#42             150   2% |++

0.0001 sec   1% |*

#MSIS2-3#34              15  <1% |

0.0001 sec   1% |*

#MSIS2-3#38             150   2% |++

0.0001 sec   1% |*

#MSIS2-3#24             135   2% |++

0.0001 sec   1% |*

#MSIS2-3#32              15  <1% |

0.0001 sec   1% |*

#MSIS2-3#35              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#40              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#33              15  <1% |

0.0000 sec  <1% |

_main                    15  <1% |

0.0000 sec  <1% |

#MSIS2-3#48              15  <1% |

0.0  sec  <1% |

Верхние позиции занимают строки, в которых были произведены изменения. Видно, что строка 44 до изменения выполнялась 0.0091 sec после 0.0014 sec. Выполнение строки 46 заметно улучшилось с 0.0070 sec до 0.0002 sec. Выполнение строки 34 изменилось с 0.0009 sec до 0.0001 sec.Общее время выполнения программы изменилось с 0.0299 sec на 0.0143 sec. После сделанных изменений удаляем ненужную библиотеку stdio.h. После её удаления программа не обращается к файлам.

Обращение к файлам:

Третье изменение:

Из статистических данных видно, что небольшое кол-во времени на один  вызов затрачивается на очистку экрана (строка 32). Попытаемся заменить этот код на другой. Операцию сlrscr(), строка 32, заменим на Ассемблерный код:

void cls()

{

union REGS r;

r.h.ah=6;

r.h.al=0;

r.h.ch=0;

r.h.cl=0;

r.h.dh=24;

r.h.dl=79;

r.h.bh=7;

int86(0x10,&r,&r);

r.h.ah=2;

r.h.dl=0;

r.h.dh=0;

r.h.bh=0;

int86(0x10,&r,&r);

}

Статистические данные после третьего изменения программы (msis2-3.txt):

Turbo Profiler  Version 2.1  Tue Mar 13 11:00:24 2007

Program: F:\Њ‘€‘\TPROF\MSIS2-3.EXE

Execution Profile

Total time: 0.0162 sec

% of total: 39 %

Run: 15 of 15

Filter: All

Show: Time and counts

Sort: Frequency       Pass count: +++   Time: ***

#MSIS2-3#22            2850  44% |++++++++++++++++++++++++++++++++++++++++++++++

0.0024 sec  38% |****************************************

#MSIS2-3#63            1500  23% |++++++++++++++++++++++++

0.0015 sec  24% |*************************

#MSIS2-3#20             285   4% |++++

0.0002 sec   3% |****

recurs                  285   4% |++++

0.0002 sec   3% |****

#MSIS2-3#56             150   2% |++

0.0002 sec   3% |****

#MSIS2-3#28             285   4% |++++

0.0002 sec   3% |***

#MSIS2-3#65             150   2% |++

0.0002 sec   3% |***

#MSIS2-3#40              15  <1% |

0.0002 sec   3% |***

#MSIS2-3#25             135   2% |++

0.0001 sec   2% |**

#MSIS2-3#53              15  <1% |

0.0001 sec   2% |**

#MSIS2-3#57             150   2% |++

0.0001 sec   2% |**

#MSIS2-3#61             150   2% |++

0.0001 sec   1% |**

#MSIS2-3#24             135   2% |++

0.0001 sec   1% |*

#MSIS2-3#54              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#33              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#59              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#43              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#44              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#45              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#46              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#47              15  <1% |

0.0000 sec  <1% |

_main                    15  <1% |

0.0000 sec  <1% |

#MSIS2-3#51              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#52              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#42              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#39              15  <1% |

Turbo Profiler  Version 2.1  Tue Mar 13 11:00:24 2007

0.0000 sec  <1% |

#MSIS2-3#38              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#37              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#36              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#35              15  <1% |

0.0000 sec  <1% |

cls                      15  <1% |

0.0000 sec  <1% |

#MSIS2-3#34              15  <1% |

0.0000 sec  <1% |

#MSIS2-3#67              15  <1% |

0.0000 sec  <1% |

Строка 51 (бывшая  32) стала выполняться быстрее.  Но время программы увеличилось с  0.0143 sec до 0.0162 sec .

Вывод: Поэтапно производя изменения в программе и сравнивая статистические данные, мы уменьшали время выполнения программы и находили те места в программе, где ещё возможны изменения в лучшую сторону. В итоге, в результате трех изменений, время работы программы уменьшилось примерно в 8 раза.