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

Vladimir Pastushak:

В стандартной UTF-8

Я пробовал по разному, с разными кодировками и с разными разделителями.

Результат либо 5008 либо иероглифы.

Предоставьте пожалуйста рабочий код с файлом для исследования

По работе сайта:

Отображение баланса в личном кабинете немного не верное, если можно - подправьте, а то много нулей

Файлы:
q1.PNG  12 kb
Ilyas:

Предоставьте пожалуйста рабочий код с файлом для исследования

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   core();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
void core()
  {
   string value = "", name = "";

   name =  "Test\\Test.csv";
   Print(FileIsExist(name));

   ResetLastError();
 
   int m_hendle = -1;
   m_hendle = FileOpen(name, FILE_READ | FILE_WRITE | FILE_CSV);
   if(m_hendle != INVALID_HANDLE)
     {
      Print((string)m_hendle + "    " + name + " [" + (string)FileSize(m_hendle) + "]"+ (string)GetLastError());
       while(!FileIsEnding(m_hendle))
        {
         string sCurrent = FileReadString(m_hendle);
         Print("sCurrent = ", sCurrent);
        }
      FileClose(m_hendle);
     }
  }
//+------------------------------------------------------------------+
Файлы:
Files.zip  1 kb
Sergey Dzyublik:
В С++ компилируется и все работает (online: https://onlinegdb.com/Syn90dd7I), а в MQL ошибка: "'func' - ambiguous call to overloaded function"

Спасибо за сообщение, исправлено

Vladimir Pastushak:

В стандартной UTF-8

Я пробовал по разному, с разными кодировками и с разными разделителями.

Результат либо 5008 либо иероглифы.

Кодировка ANSI, работать булет только в русской Windows

Добавте флаг FILE_ANSI, при открытии файла

m_hendle = FileOpen(name, FILE_READ | FILE_WRITE | FILE_CSV | FILE_ANSI);
Sergey Dzyublik:
Баг МТ5 (build 2340) при передаче internal struct в шаблонную функцию, полученный тип данных невозможно использовать как базовый тип данных для другой internal struct в шаблонном классе:

Спасибо за сообщение, исправлено
Sergey Dzyublik:

МТ5 (build 2347) Почему такой большой overhead при добавлении по одному элементу в массив с помощью ArrayResize, если память для них была заранее зарезервирована?

Прошу рассмотреть возможность улучшения внутреннего алгоритма резервирования с помощью ArrayResize.

Например, для классов можно припустить, что они кроме вызова конструктора выполняют некую "внутреннюю регистрацию в списках".
И в рамках резервирования с помощью ArrayResize, кроме непосредственного выделения памяти, можно попробовать оптимизировать процесс:
- брать данные из соседнего созданного элемента (например указатель на таблицу виртуальных функций);
- заранее выполнять или резервировать место под "внутреннюю регистрацию" классов, которые еще не созданы;

Спасибо за сообщение.

Код ArrayResize имеет защиту от пустого вызова (когда нет изменения количества элементов), поэтому код функции не отрабатывает.

Тогда как реальное изменение количества элементов, заставляет сработать ту или часть функции ArrayResize, в зависимости от массива


Благодаря представленному Вами коду, мне удалось свести сложность одной из частей ArrayResize к нулю, это ускорит работу функции для массивов объектов
Ilyas:

Подскажите, как уменьшить потребление памяти Терминалом? При запуске советника запрашиваю несколько миллионов тиков. Делаю на них вычисления и больше они не нужны. Использую только тиковые функции для подгрузки свежих тиков, чтобы не было пропусков.


Терминал из-за этого миллиона тиков потребляет 500 Мб памяти и освобождать не торопится. Точнее, просто не освобождает. Возможно ли как-то принудить Терминал почистить все свои кеши, чтобы минимизировать потребление? Для VPS 0.5 Гб на каждый Терминал - жирно выходит.

fxsaber:

Подскажите, как уменьшить потребление памяти Терминалом? При запуске советника запрашиваю несколько миллионов тиков. Делаю на них вычисления и больше они не нужны. Использую только тиковые функции для подгрузки свежих тиков, чтобы не было пропусков.


Терминал из-за этого миллиона тиков потребляет 500 Мб памяти и освобождать не торопится. Точнее, просто не освобождает. Возможно ли как-то принудить Терминал почистить все свои кеши, чтобы минимизировать потребление? Для VPS 0.5 Гб на каждый Терминал - жирно выходит.

ArrayFree

Если в программе необходимо самостоятельно управлять памятью в сложных динамических условиях, то функция ArrayFree() позволит явным образом и немедленно освобождать память, занятую ненужным уже динамическим массивом.

Документация по MQL5: Операции с массивами / ArrayFree
Документация по MQL5: Операции с массивами / ArrayFree
  • www.mql5.com
//| Класс диалога для работы с памятью                               | //| Освобождение памяти текущего массива                             | //| Попытка добавления памяти для текущего массива                   | //| Обработка событий                                                |...
Slava:

ArrayFree

Освобождаю, конечно. Сам терминал в кеше у себе хранит тики, которые мне не нужны во время работы.

Мне лучше потом на холодную эти тики снова поднять. Нужен механизм "остывания" Терминала.