Советник медленно, но верно увеличивает съедаемый объем оперативной памяти. Какие самые очевидные причины ? - страница 2

 
Justinas Shimkus:

Да, я закомментил индикаторы iCustom и прирост занимаемой оперативной памяти прекратился. В коде индикаторов нашел строчки начинающиеся на input и перенес их в советника. Объявил перемененные и перечислил их в iCustom в той же последовательности и тем же типом, что и в коде индикатора. Получилось например, это:

   uchar ExtPeriodNP=255;
   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 параметров" ? 

Уже спасибо. 

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

А хендл создаете в OnInit (однократно)? Если да, то, возможно, проблема в индикаторе.

IndicatorRelease делать не нужно. Он как раз для случая многих копий индикатора с разными параметрами, когда каждый из них нужен однократно.

 
Он индикатор на каждом тике похоже создает.
 
Renat Fatkhullin:
Он индикатор на каждом тике похоже создает.

Да, все так и оказалось - создавал индикатор на каждом тике. Засунул заполнение хэндлов в OnInit() и проблема решилась.

Спасибо за помощь.