Новая версия платформы MetaTrader 5 build 4755: общие улучшения - страница 14

 
Попробуй увеличить файл подкачки
 
fxsaber #:

Не может выделить 64 Мб, при этом говорит, что есть 6 гигов.

Выделил красным, в чем причина:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 4755: общие улучшения

fxsaber, 2025.01.24 08:23

CS      3       10:00:47.822    MemoryException 64 Mb not available
CS      3       10:00:47.904    MemoryException 64 Mb not available
CS      0       10:00:47.986    Tester  EURUSD,M1: 0 ticks, 0 bars generated. Environment synchronized in 0:00:00.133. Test passed in 0:00:19.075 (including ticks preprocessing 0:00:18.891).
CS      0       10:00:47.986    Tester  EURUSD,M1: total time from login to stop testing 0:00:19.208 (including 0:00:00.133 for history data synchronization)
CS      3       10:00:47.986    Tester  not enough available memory, 2211 Mb used, 6233 Mb available, maximal available block is 30 Mb
CS      0       10:00:47.986    Tester  log file "C:\Terminals\MT5\Tester\Agent-127.0.0.1-3016\logs\20250124.log" written
CS      0       10:00:47.988    Tester  test Experts\Tester.ex5 on EURUSD,M1 thread finished

Не может выделить 64 Мб, при этом говорит, что есть 6 гигов.


Всего свободное место в памяти есть, но видимо сильно фрагментировано. Почему менеджер памяти не занимается упаковкой - не знаю.

 
Stanislav Korotky #:

Всего свободное место в памяти есть, но видимо сильно фрагментировано. Почему менеджер памяти не занимается упаковкой - не знаю.

Спасибо. Хорошее замечание.

 
Stanislav Korotky #:

Выделил красным, в чем причина:


Всего свободное место в памяти есть, но видимо сильно фрагментировано. Почему менеджер памяти не занимается упаковкой - не знаю.

Наверное огромными матрицами работает.
Хорошо, что для себя от них отказался.
Продолжаю по старинке (как и в С++ кстати)
Динамическими массивами структур с динамическими массивами.

struct far{float   c[];};
struct dar{double  c[];};
dar data_d[];//вариант матриц на массивах структур, до 100 раз быстрее при Resize, чем matrix - https://www.mql5.com/ru/forum/462148
far data_f[]; 

Подмассивы с новыми строками во все свободные места памяти легко распределит (от нескольких байт до нескольких килобайт в зависимости от числа столбцов).

Странно, что МQ выбрали такой вариант - брать под матрицу сразу огромный кусок памяти, который для изменения размера может часто искать новое место  в памяти. Может и забывает (не успевает) удалять, потому и осталось 30мб максимального свободного блока.

 

Forester #:
Наверное огромными матрицами работает.

Нет матриц и огромных массивов.

Странно, что МQ выбрали такой вариант - брать под матрицу сразу огромный кусок памяти, который для изменения размера может часто искать новое место  в памяти. Может и забывает (не успевает) удалять, потому и осталось 30мб максимального свободного блока.

Склоняюсь к тому, что где-то утечка памяти происходит.

 
fxsaber #:
Склоняюсь к тому, что где-то утечка памяти происходит.

Ставлю на фрагментацию и запаздывание со сборкой мусора. Правда, непонятно, это win api, или алгоритмы терминала...

 

Вроде переназначение заданий между агентами в локальной сети есть, но как то не до конца сделано ((
На одном из агентов 35 заданий осталось, при этом 6 агентов бездействуют. А если тест по реальным тикам и за большой период, то это очень долго 35 заданий одним агентом вычислять.
Исправьте пожалуйста.


 
Еще предложение.
Если машина, которая запускает тестирование с агентами из локальной сети тоже имеет добавленные агенты, то может не нужно при поиске предлагать свои же агенты и в списке локальной сети?
Можно не заметить (и не удалить вручную) и перегрузить ведущий компьютер удвоенным числом вычислений и потребления памяти..

 
Edgar Akhmadeev #:

Ставлю на фрагментацию и запаздывание со сборкой мусора. Правда, непонятно, это win api, или алгоритмы терминала...

Из за этого инцидента я у себя решил ставить ArrayFree(); в конце функций, если они создавали массивы.
Тут https://www.mql5.com/ru/docs/array/arrayfree ничего не сказано, что программа при выходе и функции освобождает память дин. массивов, а только при завершении программы.

fxsaber #:

Склоняюсь к тому, что где-то утечка памяти происходит.

Попробуйте тоже использовать и сравнить - зависнет ли та же программа из за нехватки больших блоков памяти.
Документация по MQL5: Операции с массивами / ArrayFree
Документация по MQL5: Операции с массивами / ArrayFree
  • www.mql5.com
Освобождает буфер любого динамического массива и устанавливает размер нулевого измерения в 0. Параметры array[] [in]  Динамический массив...
 
Forester #:

Вроде переназначение заданий между агентами в локальной сети есть, но как то не до конца сделано ((
На одном из агентов 35 заданий осталось, при этом 6 агентов бездействуют. А если тест по реальным тикам и за большой период, то это очень долго 35 заданий одним агентом вычислять.
Исправьте пожалуйста.

Сбалансировали раздачу заданий, после вчерашних 3-х обновлений, сегодня - идеально! Спасибо)