Optimeerimine

Siluriga Turbo Debugger saate jälgida programmi tööd ja otsida programmist mitmesuguseid vigu. Kui te olete saanud oma programmi juba töökorda, siis võib see vahel veel olla ebapiisav. Mõnikord esitatakse programmile nõudmisi, et mingi teatud programmiosa tuleb täita maksimaalselt n sekundiga. Sel juhul tuleb uurida, kas programm selle ülesande täidab ja kui see nii ei ole, siis üritada kasutatud algoritme või ka programmeerimisstiili ja funktsioone nii muuta, et programmi kiiremini töötaks. Selleks otstarbeks ongi loodud silur Turbo Profiler.

Üldiselt on inimene alati arvuti juures see kõige aeglasem osa. Seega ei ole mõtet optimeerimisega ülepingutada ja asjatult head programmistuktuuri ohverdada või mingeid erilisi trikke kasutada. Optimeerimine on vajalik vaid siis, kui programm ilmselt reageerib tunduvalt aeglasemini kui kasutaja suudab temasse andmeid sisestada või kui programmile esitatakse kindlaid nõudmisi maksimaalse tööaja suhtes.

Turbo Profiler analüüsib teie programmi ja teatab, milliseid funktsioone kõige sagemini välja kutsuti, ka kui palju aega nende jaoks kasutati (protsentuaalselt ja arvuliselt). Nähes nüüd, millistes programmiosades kõige rohkem aega kasutati, võite seda programmiosa uurides jõuda järeldusele, kuidas sama tööd kiiremini teha.

Turbo Profileri kasutamiseks tuleb transleerida programm koos siluri andmetega, kuna Turbo Profiler kasutab samuti neid andmeid. Lisaks sellele oleks kasulik programmi struktuuri mõnevõrra muuta. Kui Turbo Profiler uurib ka kasutaja vastust nõudvaid funktsioone (scanf(), getch() jne.), siis sõltub tulemus iga kord kasutaja vastamise kiirusest. Seepärast tuleks üritada programmi niimoodi struktureerida, et neid osi saaks uuringutest välja jätta.

Turbo Profileri võite startida käsuga tprof käsurealt või programmeerimiskeskkonnast menüü "=" käsuga Turbo Profiler. Nüüd avaneb Turbo Profileri aken, mis on jagatud horisonaalselt kaheks. Ülemine näitab uuritava programmi teksti ja alumine sisaldab uuringute tulemusi (statistikat). Algselt märgistab Turbo Profiler kõik programmi read. Statistikat tehakse ainult märgistatud ridade kohta. Kui reast vasakul on sümbol '=>', siis on rida märgistatud ja tema kohta tehakse statistikat.

Uuringute alustamiseks startige programm käsuga Run (klahv <F9>). Peale programmi töö lõppu ilmuvad alumises aknas statistikaanalüüsi tulemused.



Joonis 20: Turbo Profileri aken

Joonisel 20 näete Turbo Profileri akent näiteprogrammi INTEGRAL.EXE analüüsi tulemustega. Alumine aken (Execution Profile) on omakorda kaheks jaotatud. Ülemises osas on esitatud andmeid kogu programmi kohta. Seal on kogu programmi tööaeg (Total time:), alumises aknas näidatavate andmete hulk (Display:) ja nende sorteerimise viis (Sort:).

Alumine osa on jaotatud omakorda kaheks. Vasakpoolne osa näitab iga rea kohta kui palju sellel real tööaega kulutati. Nagu näete, kulutati enamus programmi INTEGRAL.EXE ajast (52%) real 99. Vajaduse korral võite lasta näidata ka iga rea kasutamise arvu. Mõnda rida täidetakse väga mitu korda (tsüklid), kuid tema täitmine ei võta palju aega. Alumise aknaosa parempoolne osa sisaldab lihtsustatud tulpdiagrammi, mis näitab iga rea jaoks kulutatud suhtelist ajahulka.

Mingi kindla rea markeerimiseks viige kursor sellele reale ja vajutage klahvile <F2> või vajutage hiire vasakule nupule selle rea kohal. Kui te vajutate hiire paremale nupule Turbo Profileri ülemises aknas, ilmub ekraanile selle akna kohale menüü, mis võimaldab markeerida või eemaldada markeeringut programmi tervetelt piirkondadelt. Selle menüü alammenüü Add areas käsk All routines markeerib kõik programmi funktsioonid tervikuna. Seega analüüsitakse funktsioone vaid tervikuna, mitte aga iga funktsiooni iga rida. Ka teegifunktsioone analüüsitakse. Käsk Modules with source markeerib vaid need funktsioonid, mis on antud programmis kodeeritud (seega mitte teegifunktsioone). Käsk Routines in module markeerib vaid antud faili iga funktsiooni ja käsk Every line in module markeerib antud faili iga rea. Käsk Lines in routine markeerib selle funktsiooni iga rea, milles asub kursor. Käsk Current routine analüüsib antud funktsiooni kogu tööaega. Alammenüü Remove areas võimaldab piirkondadelt markeeringut eemaldada.

Hiire paremale nupule vajutamine alumises aknas toob ekraanile selle akna kohaliku menüü. Selles menüüs võite valida, kas esitada iga rea kohta vaid tema jaoks kulunud aeg (Time), tema täitmise arv (Counts) või mõlemad (Both). Võimalik on määrata ka esitatud andmete sorteerimisviisi.

Menüü Statistics käsuge Profiling options ... avatud dialoogis saab valida analüüsitüübiks aktiivse (Active) või passiivse (Passive). Esimesel juhul peatub Turbo Profiler igal real, mis on markeeritud ja mõõdab tema jaoks kulunud aega ja muud. Teisel juhul teeb Turbo Profiler vaid "pistelist kontrolli". Esimene moodus on muidugi hulga täpsem, kuid ka tunduvalt aeglasem. Pika programmi puhul oleks kasulikum määrata kõigepealt passiivse analüüsiga aeglasemad programmiosad umbes ja siis aktiivselt analüüsida vaid neid osi.