Скачать MetaTrader 5

Артефакты MQL5

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся история MQL5.community в одном месте!
Sergey Pavlov
8979
Sergey Pavlov 2012.12.22 17:25 

Как Вы думаете, от перестановки местами циклов, скорость исполнения программы меняется?

Вот два варианта: 

Вариант 1Вариант 2
#define ARRMAX     10000
struct arr
  {
   double            y1;
   double            y2;
   double            y3;
   double            y4;
   datetime          t;
  };
arr         arrstr[];
datetime    arrdat[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(arrstr,ARRMAX,ARRMAX);
   ArrayResize(arrdat,ARRMAX,ARRMAX);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0; i<ARRMAX; i++)
     {
      if(i==0) arrdat[i]=0;
      arrdat[i]+=i;
      arrdat[i]+=i;
      arrdat[i]+=i;
     }
   for(int i=0; i<ARRMAX; i++)
     {
      if(i==0) arrstr[i].t=0;
      arrstr[i].t+=i;
      arrstr[i].t+=i;
      arrstr[i].t+=i;
     }
  }
#define ARRMAX     10000
struct arr
  {
   double            y1;
   double            y2;
   double            y3;
   double            y4;
   datetime          t;
  };
arr         arrstr[];
datetime    arrdat[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(arrstr,ARRMAX,ARRMAX);
   ArrayResize(arrdat,ARRMAX,ARRMAX);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0; i<ARRMAX; i++)
     {
      if(i==0) arrstr[i].t=0;
      arrstr[i].t+=i;
      arrstr[i].t+=i;
      arrstr[i].t+=i;
     }
   for(int i=0; i<ARRMAX; i++)
     {
      if(i==0) arrdat[i]=0;
      arrdat[i]+=i;
      arrdat[i]+=i;
      arrdat[i]+=i;
     }
  }

 

ВНИМАНИЕ, вопрос: Какой вариант быстрее?

Andrey Voytenko
23103
Andrey Voytenko 2012.12.22 17:35  
А по моему они одинаковые.
Sergey Pavlov
8979
Sergey Pavlov 2012.12.22 17:37  

Можете проверить, но второй быстрее!

Dmitry Fedoseev
42921
Dmitry Fedoseev 2012.12.22 17:45  
DC2008:

Можете проверить, но второй быстрее!

Мы можем проверить, сумейте вы.
Anatoli Kazharski
56950
Anatoli Kazharski 2012.12.22 17:49  
DC2008:

Можете проверить, но второй быстрее!

На сколько второй быстрее первого в Ваших тестах? ))
Sergey Pavlov
8979
Sergey Pavlov 2012.12.22 17:55  
tol64:
На сколько второй быстрее первого в Ваших тестах? ))

Примерно на 6%.

Heroix
1257
Heroix 2012.12.22 17:59  
Объясните, что значит . t, его смысл?
Anatoli Kazharski
56950
Anatoli Kazharski 2012.12.22 18:00  
DC2008:

Примерно на 6%.

Ну не знаю. ))



IgorM М
4801
IgorM М 2012.12.22 18:06  
tol64:Ну не знаю. ))

если время выполнения скрипта настолько мало, то логичнее будет замерять, к примеру, по 100 выполнений тела скрипта, т.е. добавить еще один цикл

ЗЫ: разница в 16 мс несерьезно как то 

Sergey Pavlov
8979
Sergey Pavlov 2012.12.22 18:07  
avoitenko:
Как вы их вычислили? Приведите код пожалуйста.

Так код же приведён в таблице. Пропускаете в тестере, хотя бы за неделю, на всех тиках.

 

Файлы:
test_1.mq5 2 kb
test_2.mq5 2 kb
MetaQuotes
Админ
24952
Renat Fatkhullin 2012.12.22 18:13  
IgorM:

если время выполнения скрипта настолько мало, то логичнее будет замерять, к примеру, по 100 выполнений тела скрипта, т.е. добавить еще один цикл

ЗЫ: разница в 16 мс несерьезно как то 

16 мс - граница точности GetTickCount. То есть, замерять разницу во времени в пределах 32 мс нельзя из-за диких погрешностей.
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий