Второе изменение:
Из данных профиля мы видим, что неэффективными являются строки с номерами 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 раза.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.