Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 42

 
Некоторое время назад компиляция кода занимала буквально доли секунды, а сейчас 8-10 секунд, вне зависимости от количества строк - в это время высвечиваются песочные часы. Что произошло с компилятором?


МТ4-625
МЕ 5-914

 
Решил проверить скорость работы с Терминальными переменными, создал цикл на 10 000:

void init() {

   GlobalVariablesDeleteAll();

   Print("Time_Start");

   for(int cnt_2=0; cnt_2<Num_Cycles; cnt_2++) {
      GlobalVariableSet("Array_INPUTS["+cnt_2+"]",     999.9);
   }

   Print("Time_End");

}

Оказалось что время исполнения for-цикла занимает ~15 секунд. Если заменить Терминальные переменные массивом такой же длины то исполнение практически мгновенное. Сохранение в файл (GlobalVariablesFlush) должно происходить на этапе deinit-a и принтом учитываться не должно. Хотелось бы понять на что расходуются эти 15 секунд, почему различие во времени исполнения между терминальными переменными и работой с массивом такое значительное? Нет ли возможности ускорить работу Терминальных переменных?

. . .
Сейчас после последнего принта добавил еще один GlobalVariablesDeleteAll() - т.е. теперь Терминальные переменные вообще не должны сбрасываться на диск, а работа должна происходить на уровне памяти, но на времени исполнения это никак не отразилось, быстрее не стало.
Почему?
 
chief2000:
Некоторое время назад компиляция кода занимала буквально доли секунды, а сейчас 8-10 секунд, вне зависимости от количества строк - в это время высвечиваются песочные часы. Что произошло с компилятором?


МТ4-625
МЕ 5-914

Скорее всего это антивирус тормозит с анализом создаваемого файла.

Какой антивирус используете и что происходит в нагрузкой на процессы редактора и самого антивируса в Диспетчере задач во время компиляции?

 
chief2000:
Решил проверить скорость работы с Терминальными переменными, создал цикл на 10 000:

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

Для теста я запустил ваш пример у себя:

#property strict

int Num_Cycles=10000;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   GlobalVariablesDeleteAll();

   Print("Time_Start");
   for(int cnt_2=0; cnt_2<Num_Cycles; cnt_2++) 
     {
      GlobalVariableSet("Array_INPUTS["+cnt_2+"]",999.9);
     }
   Print("Time_End");
  }



2014.04.11 22:26:54.558 Test USDJPY,H1: uninit reason 0
2014.04.11 22:26:54.558 Test USDJPY,H1: Time_End
2014.04.11 22:26:46.589 Test USDJPY,H1: Time_Start
2014.04.11 22:26:46.589 Test USDJPY,H1: initialized

10000 циклов записи (по сути на диск) у меня заняли 8 секунд.

 
Renat:

Скорее всего это антивирус тормозит с анализом создаваемого файла.

Какой антивирус используете и что происходит в нагрузкой на процессы редактора и самого антивируса в Диспетчере задач во время компиляции?

Дело в том что еще совсем недавно, наверное недели 2-3 назад, все компилировалось быстро, возможно замедление произошло после очередного обновления, не уверен. Антивирус - NIS.
 
Renat:

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

Для теста я запустил ваш пример у себя:

10000 циклов записи (по сути на диск) у меня заняли 8 секунд.


Недавно stringo говорил обратное, т.е. Терминальные переменные сбрасываются на диск только при штатном закрытии МТ4 или если используется функция GlobalVariablesFlush(). Т.о. без этого Терминальные переменные должны храниться в памяти и скорость работы с ними не должна отличаться от скорости работы с массивами (кому действительно необходимо сохранять их значения на диск всегда могут воспользоваться вышеупомянутой функцией), но на практике это не так. Пожалуйста проверьте, может быть есть возможность ускорить работу с ними. Кстати, создайте >10-20 000 Терминальных переменных и попытайтесь удалить их вручную - тоже занимает относительно немало времени, а есть порог, превышение которого делает работу с Терминальными переменными практически невозможной.

 

Уважаемые разработчики, ответьте на два вопроса:

1. Стандартная библиотека MQL4 имеет тот же статус что и STL на С++ или вы ее как стандарт не будете объявлять и соответственно возможны какие то изменения в существующих классах?

2. Почему после установки нового терминала к примеру с InstaForex, при закачке архива котировок выскакивает сообщение, что котировки будут загружены с MetaQuotes? ОС Win7x64, в системе не установлено ни одного терминала, т.е. МТ4 с InstaForex ставился единственным терминалом. То же самое происходит с Альпари. В сервисдеск я так и не добился внятного ответа, кроме того, что якобы так было всегда, что является неправдой, т.к. на старых терминалах подобного не наблюдалось пока терминал одного ДЦ не переключишь на счет другого ДЦ, тогда действительно выскакивало сообщение, что будут подкачаны котировки со стороннего ДЦ (чей терминал установлен).

 
Barbarian:

В сервисдеск я так и не добился внятного ответа, кроме того, что якобы так было всегда, что является неправдой


Чистой правдой. Свой сервер истории есть, насколько я знаю, только у Альпари (для загрузки с него нужно ставить их терминал). Все остальные качают историю с сайта Метаквотов.
 
Что случилось с печатью в МТ4? Зависает при нажатии на печать.
 
Evgeno:
Вобщем у меня такая беда:

OnChartEvent() не работает на тестере с визуализацией...

А разве события на тестере работают?

Я для тестера специально обходной путь делал, когда мне нажатие кнопки отследить надо было.

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