1957. Тестер сдирает всю память - страница 2

 

поочередено стал удалять строки в коде

Запись чтение файла - не влияет. 

В таймере читаю полную историю (не спрашивайте, зачем)

после удаления этой строки:

string symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);

Память ест медленнее, но ест.


а вот когда дублирую эти строки, то память ест быстрее.

Мне кажется, что очередь в таймере переполняется. Пока не завершился предыдущий проход таймера, - добавляется новый проход и очередь растет, растет и память.

Но раньше такого не было. Значит что-то добавили. Что? 

Если очередь постоянно увеличивается, значит нужна отдельная функция - Освободить таймер. 


полный код:

input int                       SLEEPING=500;                             //SLEEPING --> Delay between code execution in milliseconds
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {

  }
bool TimerOk=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TimerOk)
     {
      if(!EventSetMillisecondTimer(SLEEPING))
        {
         Print("Error with timer ");
         double sectimer=MathCeil(SLEEPING/1000);
         if(sectimer<1)sectimer=1;if(!EventSetTimer((int)sectimer))
           {
            Print("Error with timer ");
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   TEST1957();
   TimerOk=true;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TEST1957()
  {
   string closebuffer;
   closebuffer=TEST1957ReadHistory();
   closebuffer=TEST1957ReadHistory();
   closebuffer=TEST1957ReadHistory();
   closebuffer=TEST1957ReadHistory();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string  TEST1957ReadHistory()

  {
   HistorySelect(0,TimeCurrent()+60);
   int     total=HistoryOrdersTotal()+HistoryDealsTotal();

   string StrintToFile=(string)(total+1000)+";";
   if(total>0)
     {
      long dealnumber=0;
      for(int i=0;i<=total+1000;i++)
        {
         if(HistoryOrderGetTicket(i)>0)
           {
            string symboll; 
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);
           }
        }
     }
   return(StrintToFile  );
  }

 

а если сделать так:

int LastTime=0;
string  TEST1957ReadHistory()
  {
   HistorySelect(LastTime-1,TimeCurrent()+60);
   int     total=HistoryOrdersTotal()+HistoryDealsTotal();

   string StrintToFile=(string)(total+1000)+";";
   if(total>0)
     {
      long dealnumber=0;
      for(int i=0;i<=total+1000;i++)
        {
         if(HistoryOrderGetTicket(i)>0)
           {
            string symboll; 
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);
            symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_COMMENT);

           }
        }
     }
     LastTime=TimeCurrent();
   return(StrintToFile  );
  }

То память увеличивается 1 раз при открытии новой сделки!


при чем если продублировать 

 symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);

10 раз, то будет более заметно


Т.е. память отжирается каждый вызов  symboll=HistoryOrderGetString(HistoryOrderGetTicket(i),ORDER_SYMBOL);

Как будто загружает в память новую таблицу сделок каждый раз..

 

3-4 МБ в секунду приращивает эксперт с OnTimer() с шагом 200милисекунд. Историю не ворошит, то текущие ордера мониторит постоянно.

На "живом" графике, не тестер.

 

Тот же проблем есть и с MetaTrader 5 Agents Manager build 1957. Кто то запускает тесты, которые сдирают всю память серверов в нашей фирме. Ето ведеть за себе увеличивание на pagefile.sys до больших размеров пока полностю не займет все свободное дисковое пространство на Disk C:. А ето ведет за себе сбой сервера, на которого работают и другие люди. 

Просба спешно разрешить етот проблем, потому что вся фирма страдает от него. Я имею агенты на свише 50 серверов и они до сих пор больше чем 2 года работали незаметно для людей, а сейчак эти агенты начали сбиват серверов по всей фирмы.

 
Rosimir Mateev:

Тот же проблем есть и с MetaTrader 5 Agents Manager build 1957. Кто то запускает тесты, которые сдирают всю память серверов в нашей фирме. Ето ведеть за себе увеличивание на pagefile.sys до больших размеров пока полностю не займет все свободное дисковое пространство на Disk C:. А ето ведет за себе сбой сервера, на которого работают и другие люди. 

Просба спешно разрешить етот проблем, потому что вся фирма страдает от него. Я имею агенты на свише 50 серверов и они до сих пор больше чем 2 года работали незаметно для людей, а сейчак эти агенты начали сбиват серверов по всей фирмы.

Тоже заметил прирост pagefile до 60 гиг. Не подумал на таймер 
 

Ситуация критическая. Просьба спешно выключит весь MQL5 Cloud Network, потому что с него продолжают атаки всех серверов нашей фирмой. Весь ИТ отдел в паника. Когда решите проблем и выпустите новий билд, тогда снова можете включить MQL5 Cloud Network. 


Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Большую часть времени современные компьютеры простаивают и не используют всех возможностей процессора. Мы предлагаем задействовать их с пользой. Вы можете сдавать мощности вашего компьютера другим участникам нашей сети для выполнения разнообразных...
 
Rosimir Mateev:

Ситуация критическая. Просьба спешно выключит весь MQL5 Cloud Network, потому что с него продолжают атаки всех серверов нашей фирмой. Весь ИТ отдел в паника. Когда решите проблем и выпустите новий билд, тогда снова можете включить MQL5 Cloud Network. 

Это вам за удаление моей темы на англоязычном форуме.

А не проще у себя отключить MQL5 Cloud Network ?

 
Georgiy Merts:

Это вам за удаление моей темы на англоязычном форуме.

А не проще у себя отключить MQL5 Cloud Network ?

А решаю свои проблемы, но гдето в мире есть еще 20 000 агента, которые делают тоже самое как и у меня. Ренат рискует потерять большая част из этих агентов, когда люди узнают почему ихние серверы сбивают. Я сам уже думаю деинсталировать все агенты и больше никогда не вернутся.

 
Rosimir Mateev:

А решаю свои проблемы, но гдето в мире есть еще 20 000 агента, которые делают тоже самое как и у меня. Ренат рискует потерять большая част из этих агентов, когда люди узнают почему ихние серверы сбивают. Я сам уже думаю деинсталировать все агенты и больше никогда не вернутся.

Ну, может быть, может быть...

Тем не менее, отключать все MQL5 Cloud Network, думаю, Ренат не будет.

 

Утечку памяти нашли и через пару часов выпустим обновление на MetaQuotes-Demo.

Клаудную сеть временно остановили и обновим ее в первую очередь.

Извините за ошибку, пожалуйста.

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