czwartek, 6 września 2007

Benchmarks

W pracy zobaczyłem takie przypisanie:
str=str==null:"";

Mały quiz co ono robi?Jeśli str jest nullem przypisuje mu wartość "" (pustego ciągu znaków) Ale to jeszcze nic kiedyś znalazłem boolean foo = e.isEditable()?false:true;

Pokazałem to koledze i patrzał w jak w święty obraz, i powiedział: ""No tak..., ale to przypisanie jest szybsze niż if.

To zrobiłem benchmarka.

Najpierw pównałem czasy wykonywania ifa i operatora trójkowego na int-cie. Dostałem:

Test IF 1 took: 14173915617 (IF 1 to if(i!=0)i=0;)
Test IF 2 took: 14379876656 (IF 2 to if(i==0)i=0;)
Test tt 1 took: 12861274581 (tt 1 to i=i==0?i:0;)
Test tt 2 took: 12820057624 (tt 2 to i=i!=0?i:0;)
Total tests time 12.861274581s.
Total time 54.244589651s.

Dla stringa (oznaczenia takie same, ale za zero wpada null lub "".

Test IF 1 took: 18965727769
Test IF 2 took: 14334927392
Test tt 1 took: 14242425705
Test tt 2 took: 13405839734
Total tests time 18.965727769s.
Total time 60.957413565s.

To co ciekawego wyszło, to to ze czas wykonania ifa zależy od tego czy daje on true, czy false (if(true) jest szybszy niz if(false)).

Benchmarki wykonałem własnym programem do mikrobenczmarków. Pliki są dostępne u Łosia.

Reklama:

Zachęcam do zajrzenia na: http://fizolof.blogspot.com/

Moja strona domowa zmieniła adres: http://jbhome.wikidot.com/

Ta strona nie będzie już updejtowana. Blog został przeniesiony na: http://jbhome.wikidot.com/blog:start

Blog: