Скорость работы функции - страница 3

 
Mislaid:

Все равно неясно. Значения скачут с большим разбросом. %% определить не удается, только тенденция
Возможно проц загружен чем-то ещё и неравномерно, например работают другие эксперты и с приходом тиков нагрузка растёт или оптимизация работает, видео, сканирование ...
 
goldtrader:
Возможно проц загружен чем-то ещё и неравномерно, например работают другие эксперты и с приходом тиков нагрузка растёт или оптимизация работает, видео, сканирование ...

Убил все. Грешил на то, что тормозит Print() с запросом на вывод. Переделал скрипт. Вычислил значение t1 - GetTickCount() перед печатью . Сейчас переделал приоритет терминала на самый высокий. Затраты времени существенно сократились. Но результат все равно непредсказуем.
 

Вы не то оптимизируете :)

int start()
  {
//----
   int i, t1, Tr_H1_Bar_B2 = 0, Tr_H1_Bar_S2 = 0;
double tBar0_H1 = (iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0))/Point;
double rateinfo[][6];

i = 0;
t1 = GetTickCount();
while (i <10000000)
{
   ArrayCopyRates(rateinfo, NULL,PERIOD_H1);
   tBar0_H1 = rateinfo[0, 4] - rateinfo[0, 1];
   if(tBar0_H1 > 0) Tr_H1_Bar_B2 = 1;
   if(tBar0_H1 < 0) Tr_H1_Bar_S2 = 1;
   i++;
}
Print("Вариант -2",t1 - GetTickCount());

i = 0;
t1 = GetTickCount();
while (i <10000000)
{
   tBar0_H1 = iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0);
   if(tBar0_H1 > 0) Tr_H1_Bar_B2 = 1;
   if(tBar0_H1 < 0) Tr_H1_Bar_S2 = 1;
   i++;
}
Print("Вариант -1",t1 - GetTickCount());

i = 0;
t1 = GetTickCount();
while (i <10000000)
{
   tBar0_H1 = (iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0))/Point;
   if(tBar0_H1 > 0) Tr_H1_Bar_B2 = 1;
   if(tBar0_H1 < 0) Tr_H1_Bar_S2 = 1;
   i++;
}
Print("Вариант 0",t1 - GetTickCount());

t1 = GetTickCount();
i = 0;
while (i <10000000)
{
   if(tBar0_H1 > 0) Tr_H1_Bar_B2 = 1;
   if(tBar0_H1 < 0) Tr_H1_Bar_S2 = 1;
   i++;
}
Print("Вариант 1",t1 - GetTickCount());

t1 = GetTickCount();
i = 0;
while (i <10000000)
{
   if(tBar0_H1 > 0) Tr_H1_Bar_B2 = true;
   if(tBar0_H1 < 0) Tr_H1_Bar_S2 = true;
   i++;
}
Print("Вариант 2",t1 - GetTickCount());


t1 = GetTickCount();
i = 0;
while (i <10000000)
{
   Tr_H1_Bar_B2 = (tBar0_H1 > 0);
   i++;
}
Print("Вариант 3",t1 - GetTickCount());


//----
   return(0);
  }
 
TheXpert:

Вы не то оптимизируете :)


Вариант 0 отличается на 2 порядка от остальных. Про все остальное сказать определенное все равно нельзя. Отсюда, прелагаю гипотезу: поймать бесконечно малую величину невозможно. Приоритет скрипта все равно ниже приоритета терминала. Он может отодвинуть скрипт по мере надобности. Поэтому для бесконечно малых значений GetTickCount() использовать бессмысленно.
 
TheXpert:

Вы не то оптимизируете :)


Наконец-то дошло. Съездил на озеро, остудился.

Отлучил терминал от интернета, и получаем почти стабильные результаты!

Причина обращения: