Stránka 1 z 1
Měření rychlosti programu a využití paměti
Napsal: stř 2. lis 2005, 20:16
od Kartmen
Zacinam s programovanim a nevim, v cem nejlip zjistim, jak je kod dobre napsanej. Pokud je nekolik moznosti jak se dostat k cili, tak potrebuju najit tu, ktera zabere procesoru nejmin casu. Proste neco v cem po kazdej uprave kodu rychle zjistim jakej to melo vliv na rychlost a jak byla vyuzita pamet.
Napsal: stř 2. lis 2005, 20:18
od sheriff.wiggum
jazyk?

Napsal: stř 2. lis 2005, 20:24
od Kartmen
No VisualBasic nebo C++ , pokud je teda neco primo co to udela ve fazi kodu. Ale stacilo me neco i pro zkompilovanej program.
Edit: a to k cemu to hlavne chci je VisualBasic v Excelu s tim, ze vysledek je normalne v listu excelu, kde vyuziva funkce z toho Basicu.
Napsal: stř 2. lis 2005, 23:47
od €agle
V C++ lze zjistit cas vykonani programu pomoci QueryPerformanceCounter(), spotrebu pameti nejjednoduseji (ne nejlepe) pres Taskmanager windowsu.
Napsal: čtv 3. lis 2005, 19:09
od Kartmen
QueryPerformanceCounter() to meri realnej cas jak to trvalo, nebo to i cas zohlednuje na kolik byl programem vyuzit procesor (pokud me treba bezi leccos na pozadi)?
A jeste teda neco, co to zmeri v tom VisualBasicu, co je v Excelu.
Nebo jak byste co nejlip napsali funkci, ktera treba porovnava dva ruzne dlouhe retezce znaku?
Napsal: čtv 3. lis 2005, 22:13
od €agle
No lze zmerit realnej cas behu aplikace, ale je to trosku slozitejsi, tady je kod:
Kód: Vybrat vše
LARGE_INTEGER Rate, StartClock, EndClock;
double invRate;
void Init()
{
QueryPerformanceFrequency((LARGE_INTEGER*) &Rate);
invRate = 1.0 / (double) Rate;
QueryPerformanceCounter((LARGE_INTEGER*)&StartClock);
}
double ftime(void)
{
QueryPerformanceCounter((LARGE_INTEGER*)&EndClock);
return (double)(EndClock-StartClock)*invRate;
}
Init zavolas na zacatku programu, pomoci ftime muzes kdykoli ziskat cas behu v double presnosti.
V normalnim VB by to jit melo (s patricnymi upravami), jelikoz QueryPerformanceCounter() je normalni funkce API, jestli to pujde i v tom Excelovskym netusim...
Na mereni vyuziti procesoru koukni
sem a
sem
Jinak co presne myslis tim porovnava dva ruzne dlouhe retezce znaku? Co chces jako zjistit? Kde se lisi, ktery je delsi, jestli jsou stejny, nebo co?
Napsal: čtv 3. lis 2005, 23:09
od Kartmen
€agle píše:
Jinak co presne myslis tim porovnava dva ruzne dlouhe retezce znaku? Co chces jako zjistit? Kde se lisi, ktery je delsi, jestli jsou stejny, nebo co?
Sory, nak sem myslel, ze to je z toho jasny, ale porovnanim teda myslim retezec A (<>=) retezec B a ze jde o znaky (a chci jen jednoduchej priklad) tak jen pokud jsou shodny.
A konkretne je 1. seznam s cca 20000 retezcema delky od 14 do 22 znaku a 2. s cca 2000 delky od 14 do 22 znaku. A hleda se, kdy jsou retezce z 1. a 2. seznamu shodne. Pricemz kazdy retezec je v obou seznamech max. jednou.
Napsal: pát 4. lis 2005, 01:42
od pavel.minarik
na ja, školní úloha, "předpokládejte, že každá řetšězec se může vystytovat nejvýše jednou", to je bohužel mimo realitu
další rada zní: dobře napsanej kód neexistuje, v dnešní době nároky na paměť nebo cpu time fakt neřeš, začni v klidu a v případě kritických aplikací optimalizuj, jinak není co řešit
Napsal: pát 4. lis 2005, 11:53
od Kartmen
pavel.minarik píše:na ja, školní úloha, "předpokládejte, že každá řetšězec se může vystytovat nejvýše jednou", to je bohužel mimo realitu
No on tam muze bejt fakt max jednou (ty retezce sou uz vysledkem jinyho programu, kterej identicky retezce odstrani) a na mim 300Mhz vraku to fakt dost trva, tak sem jen chtel vedet lestli to de lip.
Mam to zatim napsany tak, ze nejprve se porovnaj delky retezcu a pokud sou stejne delky, tak pokud je retezec delsi nez 7 znaku (psal sem to obecne ne primo na to viz vyse), tak pokud se rovnaji 2 znaky (na nejvice menene casti retezcu - retezce muzou mit temer stejny pocatek, ale cim vic doprava tim vice se meni napr. aaaaaaaa, aaaaaaab, aaaaaaac, aaaaaaba..), tak se porovna cely retezec.
A jeste dotaz je v exelovskym VB, neco podobneho jako containery v C++.