Любые вопросы от ПРОФИ к СУПЕРПРОФИ - 1. - страница 34

 
Уже хватит.
 

занимаюсь поиском увеличения скорости своих ф-ций, вот задался вопросом насколько одинаково время обращения к глобальным переменным и к локальным, набросал скрипт:

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick = GetTickCount();
//---------------------   
   Print("локальный массив: " , GetTick-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
return(0);
}

у меня в логе так:

2012.03.23 13:26:49 test EURUSD,H1: глобальный массив: 1343 миллисекунд.

2012.03.23 13:26:49 test EURUSD,H1: локальный массив: 2703 миллисекунд.

почему такая разница? может я неправильно оцениваю время доступа к переменным?

 
А подумать :)
 

Может кто просветит бестолкового почему ордер не открывается ???

ТЕСТЕР ПИШЕТ "ЖУРНАЛ ПИШЕТ ТОРГОВЫЙ ПОТОК ЗАНЯТ "

РУКАМИ ОРДЕРА ОТКРЫВАЮТСЯ

 
IgorM:

занимаюсь поиском увеличения скорости своих ф-ций, вот задался вопросом насколько одинаково время обращения к глобальным переменным и к локальным, набросал скрипт:

у меня в логе так:

2012.03.23 13:26:49 test EURUSD,H1: глобальный массив: 1343 миллисекунд.

2012.03.23 13:26:49 test EURUSD,H1: локальный массив: 2703 миллисекунд.

почему такая разница? может я неправильно оцениваю время доступа к переменным?

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTick = GetTickCount();
   Print("локальный массив: " , GetTick-start_local , " миллисекунд.");
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick = GetTickCount();   
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
return(0);
}
 
TheXpert:А подумать :)

угу, сижу уже с полчаса прикидываю, что не так делаю,если бы была бы привычка затылок рукой тереть - уже бы лысина была бы! )))))

ну а если серьезно? почему скрипт показывает такую большую разницу? был бы Борландовский компилятор, наверное было бы наоборот, ну там far-вызовы, еще можно объяснить, ну ведь MT4 работает вроде по принципу Явы - все в куче?

хотя не принципиально, принципиально лишь узнать правильно я оцениваю время доступа или нет, если правильно, тоды в глобальные переменные полкода перенесу

 
VOLDEMAR:

Перезагрузка терминала должна помочь. Это не проблема кода.

 
IgorM:

Вот так попробуйте :)

   Print("локальный массив: " , start_global-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
 
Zhunko:
аааааааааа, блин! побоялся, что время на вывод через Print() много займет
 
IgorM:
аааааааааа, блин! побоялся, что время на вывод через Print() много займет

Можно и так:

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global
,GetTickG,GetTickL;

;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTickL = GetTickCount();
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTickG = GetTickCount();   
   Print("локальный массив: " , GetTickL-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTickG-start_global, " миллисекунд.");
return(0);
}