Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Co bych měl použít pro měření délky běhu algoritmu (milisekundy)?

Odpovědět 14.12.2013 9:37
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět  +1 14.12.2013 10:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 14.12.2013 10:15
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
David Čápka:

Vím, že na to asi nejsi z jiných jazyků zvyklý, ale .NET má perfektní referenci plnou příkladů - http://msdn.microsoft.com/…cs.stopwatch(v=vs.110).aspx

Nahoru Odpovědět 14.12.2013 10:16
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:

Na něco podobného jsem si zvykl u C++ u funkcí ze souboru windows.h .

Nahoru Odpovědět 14.12.2013 10:19
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
coells
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
coells:

Většinou chceš naměřit sekundy. Cokoliv pod sekundu je nepřesné.

Také záleží na tom, co přesně chceš měřit. Pokud délku provádění alogritmu na nějakých datech, pak obvykle používám přibližně tuhle metodiku:

static void Main()
{
  DateTime start;
  int count;

  start = DateTime.Now;
  while ((DateTime.Now - start).TotalSeconds < 1)
    MerenaMetoda();

  start = DateTime.Now;
  count = 0;
  while ((DateTime.Now - start).TotalSeconds < 10)
  {
    MerenaMetoda();
    count++;
  }

  double total = (DateTime.Now - start).TotalSeconds;
  double time = time / count;
}
 
Nahoru Odpovědět 14.12.2013 11:23
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na coells
Zdeněk Pavlátka:

Měřim běh interpreteru svého jazyka :D

Nahoru Odpovědět 14.12.2013 11:26
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Kit
Redaktor
Avatar
Odpovídá na coells
Kit:

Většinou měřím na milisekundy. Když to změříš 12×, škrtneš nejhorší a nejlepší výsledek, spočítáš průměr, tak směrodatná odchylka vychází obvykle velmi nízká, v řádu desetin ms.

Nahoru Odpovědět 14.12.2013 11:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:

Pokud měříš běh interpreteru svého jazyka nějaký DateTime.Now pro tebe nebude vhodné. Bude pomalé. StopWatch bude o poznání lepší.

Každopádně nedával bych to do toho interpretru jako takového. Sám si zpomalíš jeho běh a zkreslíš vlastní výsledky. Dal bych časovou značku jako součást tvého jazyka a měřil na konci a začátku, ale zvenčí. Ne zevnitř.

 
Nahoru Odpovědět 14.12.2013 15:40
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Milan Křepelka
Zdeněk Pavlátka:

Moc jsem nepocopil ten konec. 8| Měření času chci použít na celý program(jak dlouho se interpretuje jeden kód) a na vybírání mezi kódy pro interpretaci jednotlivých příkazů.

Nahoru Odpovědět 14.12.2013 15:54
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:

Myslel jsem, že si chceš dát časový značky dovnitř toho int. např. do délky interpretace jednotlivých "intrukcí". Pokud to je jak říkáš, je to asi jedno.

 
Nahoru Odpovědět 14.12.2013 16:16
Avatar
Odpovídá na Zdeněk Pavlátka
Luboš Běhounek (Satik):

Jak psal David Čápka - ideální je třída StopWatch, interně ve win používá winapi QueryPerformance funkce, takže dokáže měřit čas zhruba na mikrosekundy (podle HW).

Nahoru Odpovědět 14.12.2013 17:35
:)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.