Советник медленно, но верно увеличивает съедаемый объем оперативной памяти. Какие самые очевидные причины ?
1 object of type A left
32 bytes of leaked memory
Нет, только такое:
FF 0 19:23:11.890 Terminal InstaTrader 5 build 1455 started
QM 0 19:23:11.898 Terminal Windows 10 Pro ..
OG 0 19:23:11.898 Terminal C:\...
GK 0 19:23:12.428 Experts expert InDayTrade (EURUSD,M1) loaded successfully
HK 0 19:23:12.821 Network '9377468': authorized on InstaForex-Server through MetaTrader 5 Access Server 1950 (ping: 155.70 ms)
OD 0 19:23:12.821 Network '9377468': previous successful authorization performed from 62.63.81.32 on 2016.11.15 17:21:13
CE 0 19:23:16.303 Network '9377468': terminal synchronized with InstaForex Companies Group
LQ 0 19:23:16.303 Network '9377468': trading has been enabled - hedging mode
EP 0 19:23:22.012 Experts expert Test1 (EURUSD,M1) removed
IQ 0 19:23:22.504 Terminal exit initiated
RK 0 19:23:22.836 Network '9317868': disconnected from InstaForex-Server
OP 0 19:23:23.381 Terminal stopped
Нет, только такое:
Это вкладка Журнал. А что во вкладке (рядом) Эксперты?
Мой советник медленно, но верно увеличивает съедаемый объем оперативной памяти (прирост порядка 100 Мб/час). Какие самые очевидные причины ?
Либо баг терминала, либо массивы растут. Отключайте часть функционала советника и смотрите на изменения. Так получится локализовать проблему.
Да, попробую, спасибо. А насчет массивов, как можно вообще удалить статический массив из памяти ?
// или
ArrayFree(Array);
Если статический вот это
Проверьте кол-во и тип передаваемых в iCustom параметров. Если что-то не совпадает с реальностью, каждый вызов может создавать свою копию индикатора.
100 Мб/час — это много.
Проверьте кол-во и тип передаваемых в iCustom параметров. Если что-то не совпадает с реальностью, каждый вызов может создавать свою копию индикатора.
Проверьте кол-во и тип передаваемых в iCustom параметров. Если что-то не совпадает с реальностью, каждый вызов может создавать свою копию индикатора.
100 Мб/час — это много.
Да, я закомментил индикаторы iCustom и прирост занимаемой оперативной памяти прекратился. В коде индикаторов нашел строчки начинающиеся на input и перенес их в советника. Объявил перемененные и перечислил их в iCustom в той же последовательности и тем же типом, что и в коде индикатора. Получилось например, это:
uchar MinAmplitudeNP=20;
uchar MinMotionNP=0;
bool UseSmallerTFforEBNP=true;
ZZHandle=iCustom(NULL,PERIOD_M1,"Downloads\\AlexSTAL_ZigZagProf",ExtPeriodNP,MinAmplitudeNP,MinMotionNP,UseSmallerTFforEBNP);
Первые четыре строчки скопировал из кода индикатора.
Это не помогло, потребление памяти все росло. Я добавил IndicatorRelease(ZZHandle) в конце OnTick() и потребляемая память перестала расти, но выросла нагрузка на процессор - я так понимаю, он каждый тик пересчитывает заново значения индикатора в каждом баре.
Вроде, проблема с памятью решена, но решена крайне криво. Потому, добавлю вопрос - что понимается под "кол-во и тип передаваемых в iCustom параметров" ?
Уже спасибо.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Мой советник медленно, но верно увеличивает съедаемый объем оперативной памяти (прирост порядка 100 Мб/час). Какие самые очевидные причины ?
Добавлю: использую 5 валютных пар (хотя, что на одной, что на пяти), 6000 баров на каждом графике (установлено в терминале), использую 3 индикатора (в них массивы на 6000 элементов), использую несколько статических массивов и один динамический из MqlRates, несколько десятков переменных.
Быть может, есть какие-то само-собой разумеющиеся способы завершения OnTick() для освобождения памяти ?
Уже спасибо.