Миф о скорости выполнения оператора IF

 

Решил проверить скорость выполнения некоторых операций.

Побочный вывод:

Скорость выполнения оператора IF не зависит ни от чего!!


int $time_0=TimeLocal();

double $reg;
for(int $i=100000000;$i>0;$i--){
if(1==1){
if(2==2){
if(3==3){
if(4==4){
if(5==5){
if(6==6){
if(7==7){
if(8==8){
if(9==9){
if(0==0){
$reg=iClose(Symbol(),PERIOD_M15,1);
}}}}}}}}}}
}
Alert(TimeLocal()-$time_0);





int $time_0=TimeLocal();
double $reg;
for(int $i=100000000;$i>0;$i--){
if(1==1 && 2==2 && 3==3 && 4==4 && 5==5 && 6==6 && 7==7 && 8==8 && 9==9 && 0==0){
$reg=iClose(Symbol(),PERIOD_M15,1);
}
}
Alert(TimeLocal()-$time_0);

 

Можете сравнить также с оператором switch, который является аналогом оператора if.

switch(выражение)
  {
   case константа: операторы
   case константа: операторы
     ...
   default: операторы
  }
 

Вообще-то в таких измерениях лучше использовать GetTickCount(), а не TimeLocal()

 
Meat писал (а) >>

Вообще-то в таких измерениях лучше использовать GetTickCount(), а не TimeLocal()

Как в одном из любимых мультфильмов.

Удав:

- А в попугаях, я всё таки длиннее.

 
autoforex писал (а) >>

Можете сравнить также с оператором switch, который является аналогом оператора if.

switch, является частным случаем оператора if.

 

Странно было бы ожидать, что скорость будет разной, ибо конструкции идентичны.

Вот если бы некоторые из условий временами не выполнялись (FALSE), то первая конструкция была бы однозначно быстрее.

 

И желательно отдельно замерить пустой цикл for

И всё же измерение результатов в миллисекундах предпочтительнее измерения оных в секундах

Ну и сами цифры не помешали бы :)


P.S. Точнее не пустой for, а с $reg=iClose(Symbol(),PERIOD_M15,1);

 
Andy_Kon писал (а) >>

switch, является частным случаем оператора if.

Ну да, а я как сказал ... ;)))

 

В "слонах" лучше, чем в "попугаях".

1. Кол-во операций (циклов) (там где for) = 100000000.

2. В секундах (у меня) 54.

54/100000000=0,00000054 с/цикл

 
Andy_Kon писал (а) >>

В "слонах" лучше, чем в "попугаях".

1. Кол-во операций (циклов) (там где for) = 100000000.

2. В секундах (у меня) 54.

54/100000000=0,00000054 с/цикл

Есть предположение, что львиная доля этих 54 сек на совести $reg=iClose(Symbol(),PERIOD_M15,1); Если интересуют if'ы, это вклад нужно замерить и вычесть. Вместе с вкладом "невидимых" обслуживающих for операций.


P.S. Если Вы когда-нибудь покупали что-нибудь жидкое в свою тару, то могли наблюдать как сначала взвешивается пустая тара, а затем наполненная. Цикл for в данном случае - тара, а $reg=iClose(Symbol(),PERIOD_M15,1); - предварительно положенный в неё булыжник.

 
lna01 писал (а) >>

Есть предположение, что львиная доля этих 54 сек на совести $reg=iClose(Symbol(),PERIOD_M15,1); Если интересуют if'ы, это вклад нужно замерить и вычесть. Вместе с вкладом "невидимых" обслуживающих for операций.


P.S. Если Вы когда-нибудь покупали что-нибудь жидкое в свою тару, то могли наблюдать как сначала взвешивается пустая тара, а затем наполненная. Цикл for в данном случае - тара, а $reg=iClose(Symbol(),PERIOD_M15,1); - предварительно положенный в неё булыжник.

Абсолютно верно. Без "булыжника" всё примерно 1 с.