Ошибки, баги, вопросы - страница 3713

 
Vladislav Boyko # :

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

Personally, I have not yet experienced any urgent need for this. But if we imagine that there is some large array whose size can change both up and down, then it will not be possible to find out the actual memory consumption of the array without significant changes to the code.

За 40 лет работы программистом я, кажется, ни разу в этом не нуждался. (Это не значит, что это не может быть полезно, мне просто любопытно).

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

 
Alain Verleyen #:
например CArray или собственное решение

Посмотрел CArrayDouble. Заметил интересную особенность, что в случае реализации кастомного резервирования памяти третий параметр ArrayResize не используется. Гениально! Ведь так гораздо проще реализовать (когда сам все контролируешь). Кажется очевидным, но самостоятельно я до этого не додумался изначально.

I looked at CArrayDouble. I noticed an interesting feature: when implementing custom memory reservation, the third parameter of ArrayResize is not used. Brilliant! It's much easier to implement this way (when you control everything yourself). It seems obvious, but I didn't think of it myself initially.

//+------------------------------------------------------------------+
//| Request for more memory in an array. Checks if the requested     |
//| number of free elements already exists; allocates additional     |
//| memory with a given step                                         |
//+------------------------------------------------------------------+
bool CArrayDouble::Reserve(const int size)
  {
   int new_size;
//--- check
   if(size<=0)
      return(false);
//--- resize array
   if(Available()<size)
     {
      new_size=m_data_max+m_step_resize*(1+(size-Available())/m_step_resize);
      if(new_size<0)
         //--- overflow occurred when calculating new_size
         return(false);
      if((m_data_max=ArrayResize(m_data,new_size))==-1)
         m_data_max=ArraySize(m_data);
     }
//--- result
   return(Available()>=size);
  }
 
Alain Verleyen #:

За 40 лет работы программистом я, кажется, ни разу в этом не нуждался. (Это не значит, что это не может быть полезно, мне просто любопытно).

Анализ потребления памяти сторонней библиотеки с открытым исходным кодом.
 

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

А то автоматом коннектится к проблемному а оттуда ни котировки ни тестер не работает.

 
Aleksei Skrypnev #:

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

А то автоматом коннектится к проблемному а оттуда ни котировки ни тестер не работает.

Тоже интересует этот вопрос. Необходимо самостоятельно обходить такое решение MQ.
 

@Renat Fatkhullin

Функция WebRequest() не подхватывает прописанный прокси в настройках терминала.
Скорее всего и SocketConnect() не подхватывает.
Подправьте пожалуйста.

Вводные данные:
Сеть на компе подключена через прокси 77.110.113.214
В настройках терминала прописываю другой прокси 194.163.160.97
Тест прокси пройден. Произошёл реконнект терминала.

scr

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Test();

}

//--------------------------------------------------------------------
void Test()
{

   string url = "https://echo.free.beeceptor.com";
   string headers;
   char   body[];   
   char   result[];
   string res_header;
        
   ResetLastError();
   if(WebRequest("GET", url, headers, 5000, body, result, res_header) < 0)
   {
      Print("Ошибка в WebRequest. Код ошибки ", _LastError);
      return;
   }
        
   Print(res_header);
   Print(CharArrayToString(result));
   Print("");
}
Access-Control-Allow-Origin: *
Alt-Svc: h3=":443"; ma=2592000
Content-Type: application/json
Date: Wed, 18 Feb 2026 09:54:38 GMT
Vary: Accept-Encoding
Via: 1.1 Caddy
Transfer-Encoding: chunked

{
   "method": "GET",
   "protocol": "https",
   "host": "echo.free.beeceptor.com",
   "path": "/",
   "ip": "77.110.113.214:56313",
   "headers": {
                 "Host": "echo.free.beeceptor.com",
                 "User-Agent": "MetaTrader 5 Terminal/5.5572 (Windows NT 11.0.22631; x64)",
                 "Accept": "*/*",
                 "Accept-Encoding": "gzip, deflate",
                 "Accept-Language": "ru,en;q=0.5",
                 "Via": "1.1 Caddy"
              },
   "parsedQueryParams": {}
}
 

Прокси прописанный в настройках терминала не применился.