Проблемы с памятью

 
При запуске любого эксперта на оптимизацию с количеством итераций больше 1,5-1,8 млн (числа в левом нижнем углу тестера), когда тестер подходит к этим значениям в журнале терминала появляется: Memory handler: cannot allocate 175972192 bytes of memory. Тестер при этом продолжает работать, но новые результаты не записываются. Если запускать две копии МТ-4, эта ситуация наступает раньше: Memory handler: cannot allocate 109311840 bytes of memory. МТ-4 в это время занимает в памяти 400-500 МБ. Это ограничение МТ или это только у меня такой трабл?
МТ-4 b190, CPU Athlon x2 3800+ (без разгона), RAM 2GB Samsung, WinXP SP2.
 
Можете подробнее описать условия тестирования?
1) какой символ, период, сколько баров
2) какой тип моделирования
3) код эксперта (мы его удалим после проверки)
4) условия оптимизации

Вышлите, пожалуйста, эту информацию на stringo AT metaquotes.ru - мы постараемся разобраться.
 
Вышлите, пожалуйста, эту информацию на ...


Выслал
 
Вышлите, пожалуйста, эту информацию на ...


Выслал

Спасибо - будем проверять.
 
Вышлите, пожалуйста, эту информацию на ...


Выслал

Спасибо - будем проверять.


Предлагаю добавить в тестер режим вывода результатов тестирования в файл, а не в ОЗУ. Добавить к флажкам "Пересчитать" и "Оптимизация" флажок "Запись в файл". Тем самым можно проводить длительные тесты без большого обьема ОЗУ и не терять данных в аварийных случаях.
 
Вышлите, пожалуйста, эту информацию на ...


Выслал

Спасибо - будем проверять.


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

Проблему полностью решили - воспрользуйте новой версией mt4setup_pre192.exe , о которой писали несколько дней назад. Больше нет потери памяти на миллионных пересчетах.
 
Проблему полностью НЕ решили - новая версия останавливается на 2,7 млн. При этом остановившийся МТ занимает около 360 МБ, а свобоная оперативка более 1 ГБ.
Журнал терминала :
13:51:23 MetaTrader 4.00 build 191 started
16:29:54 Memory handler: cannot allocate 345691280 bytes of memory
16:29:54 Summaries: not enough memory [193]

Журнал тестера:
2006.04.14 16:29:54 Tester memory handler: tester stopped because not enough memory
2006.04.14 16:30:04 There were 2777376 passes done during optimization, 891787 results have been discarded as insignificant

Предлагаю, все таки, добавить в тестер режим вывода результатов тестирования в файл, а не в ОЗУ.
Тем более Вы уже сделали большой шаг в этом направлении, реализовав в новом билде временное хранение результатов каждого прогона при оптимизации. Остался маленький шажок - отключить хранение в ОЗУ (ну и добавить отключающий флажок).
 
Проблему полностью НЕ решили - новая версия останавливается на 2,7 млн. При этом остановившийся МТ занимает около 360 МБ, а свобоная оперативка более 1 ГБ.

А это точно последние апрельские билды (посмотрите дату в About)?
Столько физической памяти стоит и сколько виртуальной?

Предлагаю, все таки, добавить в тестер режим вывода результатов тестирования в файл, а не в ОЗУ.

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

Можете прислать Славе на stringo AT metaquotes . ru полный код эксперта и описание настроек оптимизатора? Мы у себя погоняем и решим проблему.
 
А это точно последние апрельские билды (посмотрите дату в About)?
Столько физической памяти стоит и сколько виртуальной?


Проверял на билдах от 7 и 14 апреля
Физической памяти 2 ГБ, своп-файл 3 ГБ.


Тут проблема во фрагментации доступной памяти из-за массовых перевыделений памяти. Вывод в файл не поможет.


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

Что касается условий тестирования - берем встроенный MACD Samplе(или любой другой), устанавливаем большие диапазоны тестирования с мелким шагом любых параметров, такие, чтобы при запуске оптимизации количество итераций было больше 3 млн., диапазон дат тестирования устанавливаем на 1-2 недели, чтоб быстрее просчитал.
 
При тестировании билда от 14 апреля обнаружилась еще одна проблема - устанавливаю параметры эксперта, запускаю на оптимизацию, смотрю - долго будет считать, нажимаю Стоп, меняю параметры в сторону уменьшения времени расчета, нажимаю Старт и мгновенно получаю в журнале
Memory handler: cannot allocate ... при этом тестер продолжает типа работать.
В старых билдах такого не наблюдалось.
 
Вывод в файл в режиме записал-и-забыл должен помочь

Имеете в виду, что вывод в файл должен помочь затормозить программу раз в 100 ? :)))

Дело на самом деле во фрагментации оперативной памяти из-за десятков/сотен миллионов перевыделений блоков в миллионных циклах прогона. Пусть свободно 512 мегабайт памяти, но если она нарезана мелкими кусками так, что нет свободного блока в 10 Mb, то любая попытка выделить такой блок приведет к неудаче.

Такое происходит из-за массовых перевыделений памяти. Попробуйте хаотично выделить и столь же хаотично с задержками(эмулируя обычную работу программы) освободить сотню миллионов раз блоки памяти различной длины. Вся память будет в дырках. Это как раз и называется "фрагментацией памяти".

Но мы найдем решение проблемы.