Как расходуется память при многократном пересоздании массива в цикле? - страница 4

 
Для МТ4 получил результат, что первый в очереди тест всегда выполняется в 4 раза дольше, в не зависимости от его содержимого:
2020.03.03 12:32:46.414 Test1234 EURUSD,H1: Test 1 = : loops=1000000 ms=11797
2020.03.03 12:32:34.627 Test1234 EURUSD,H1: Test 2 = : loops=1000000 ms=41828
Поведение напоминает МТ5 в режиме отладки.
 
Dmitry Fedoseev:

Только сначла изменил #define LOOPx10 7 на #define LOOPx10 6, а то вообще конца не было видно, может быть в этом секрет тех 17-и секунд?

#define LOOPx10 7 это количество циклов, 10 ^ 7 

секретов нет, исходники выложил

Sergey Dzyublik:
Для МТ4 получил результат, что первый в очереди тест всегда выполняется в 4 раза дольше, в не зависимости от его содержимого:

есть такое, поэтому тесты нужно чередовать разными тестами, а не один и тот же тест несколько раз выполнять, тогда результаты будут "ровные"

 
Igor Makanu:

#define LOOPx10 7 это количество циклов, 10 ^ 7 

секретов нет, исходники выложил

есть такое, поэтому тесты нужно чередовать разными тестами, а не один и тот же тест несколько раз выполнять, тогда результаты будут "ровные"

Не ну ваще)) Вы думаете я менял что-то в коде не понмая что это? Неужели я и правда произвожу впечатление такого конченого идиота?

 
Igor Makanu:

есть такое, поэтому тесты нужно чередовать разными тестами, а не один и тот же тест несколько раз выполнять, тогда результаты будут "ровные"

Не хочу создавать теорию заговора.
Но результаты на МТ4 (build 1262), ME (build 2318) для проекта, что с включенной оптимизацией, что с выключенной, получаются одни и те ж - "хреновые":

2020.03.03 12:53:02.178 ProjectTest EURUSD,H1: Test №2 = : loops=1000000 ms=11719
2020.03.03 12:52:50.461 ProjectTest EURUSD,H1: Test №1 = : loops=1000000 ms=42531

Возникает вопрос - может ли быть такое, что для МТ4 выключили оптимизацию вообще, и вне зависимости от ее настроек, все компилируется в режиме отладки???

 
Dmitry Fedoseev:

Не ну ваще)) Вы думаете я менял что-то в коде не понмая что это? Неужели я и правда произвожу впечатление такого конченого идиота?

ну началось.... 

я что читаю, то и отвечаю - был вопрос, про "поменял" и "секрет" - ответил

ладно, проехали, меня на первой работе учили золотому правилу - "работает - не трожь! " 

так и с МТ, работает, ну и ладненько, не вижу что еще обсуждать


Sergey Dzyublik:

Не хочу создавать теорию заговора.
Но результаты на МТ4 (build 1262) для проекта, что с включенной оптимизацией, что с выключенной получаются одни и те ж "хреновые" результаты:

Возникает вопрос - может ли быть такое, что для МТ4 выключили оптимизацию вообще, и вне зависимости от ее настроек, все компилируется в режиме отладки???

@Ilyas кажется писал, что сейчас компиляторы для MQL 4/5 полностью одинаковые, но что там включили или отключили сложно предположить

ну и не надо забывать, что МТ4 32-х разрядный, там много, что не так работает на современных процессорах

 

Ну вот. Все убедились что в МТ4 разная скорость, у кого-то в 4 раза, если я уменьшаю сложность цикла то и в 15 раз.

Значит тратиться время на инициализацию массива, помните же что в МТ4 массивы всегда инициализированы нулями, а в МТ5 мусором. Т.е. когда он объявлен выше уровнем - он остается как есть, а когда внутри скобок он каждый раз инициализируется, как-то так видимо.

Ну и ещё убедились в том что Федосеев был не прав, когда говорил что компилятор сделает цикл пустым..)

 
Sergey Dzyublik:

Смотрю в книгу вижу фигу:

Проводите Тест1 потом Тест2 - результат: первый в очереди (Тест1) медленнее второго в очереди (Тест2) в 4 раза.
Проводите Тест2 потом Тест1 - результат: опять первый в очереди (Тест2) медленнее второго в очереди (Тест1) в 4 раза.

Не обнаруживается такой закономерности. Тест №2 всегда быстрее, назависимо от порядка выполнения.

 
Dmitry Fedoseev:

Не обнаруживается такой закономерности. Тест №2 всегда быстрее, назависимо от порядка выполнения.

Решил проверить МТ4 (build 1080) и понял, что был не прав в плане быстроты выполнения.
Тест №2 всегда быстрее, назависимо от порядка выполнения.

 
Сравнил результаты компиляции нижеприведенного кода в разных режимах оптимизации:
#property strict
// количество итераций теста
#define LOOPx10 5

#define   SpeedTest(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong ii=0;ii<count&&!_StopFlag;ii++){EX;} \
                                              printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}
//+------------------------------------------------------------------+
void OnStart()
{
   
// tst 1
   SpeedTest(
   LOOPx10,"Test №1 = ",
   {
      int i = 1;
      while(i < 1000)
      {
         int array[1000];
         array[i] = rand() % i;
         i++;
      }
   }
   )
   
   int x;
   if (GetTickCount() > 1){
      x = 0x55664477;
   }
   while(!IsStopped()){
      Sleep(2000);
   }
   
// tst 2   
   SpeedTest(
   LOOPx10,"Test №2 = ",
   {
      int i = 1;
      int array[1000];
      while(i < 1000)
      {
         array[i] = 2 * rand() % i;
         i++;
      }
   }
   )   
}
Выводы озвучивать не буду, мало ли...
Кому интересно данные в архиве.
Файлы: