Пустой терминал не означает отсутствия поднятых баз данных чартов(приходят тики и минутная база апдейтится). Удаление индикаторов освобождает ресурсы, но нужно принимать во внимание работу преаллоцируемых кешей и пулов памяти. Они не позволяют однозначно говорить "это стоит столько ресурсов".
В сложной системе, оптимизированной для максимальной производительности обычно используется правило "скорость в обмен на память". Так и в МТ5.
Вопрос немного не по теме... а что так тормозит iCustom? Вызываю её, правда, несколько десятков раз. Отчего загрузка пользовательского индикатора идёт очень долго...
Сделал профилирование кода, так на эти функции ушло под 97% времени...
denkir: Вопрос немного не по теме... а что так тормозит iCustom? Вызываю её, правда, несколько десятков раз. Отчего загрузка пользовательского индикатора идёт очень долго...
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
Ну, если в OnInit(), то, полагаю, вполне нормально. На форуме несколько раз поднималась тема про загрузку пользовательских индикаторов, в которой объяснялось, что при загрузке индикатора "поднимается", образно говоря, куча всяких пластов - данные/потоки и пр. Для такой загрузки требуется и время, и ресурсы. В связи с чем советовалось запускать в OnInit().
Yedelkin: Ну, если в OnInit(), то, полагаю, вполне нормально. На форуме несколько раз поднималась тема про загрузку пользовательских индикаторов, в которой объяснялось, что при загрузке индикатора "поднимается", образно говоря, куча всяких пластов - данные/потоки и пр. Для такой загрузки требуется и время, и ресурсы...
Да, не обращал особого внимания, пока сам не столкнулся с этой проблемой. Про пласты, согласен.
...В связи с чем советовалось запускать в OnInit().
Да логика-то не моя :) Всего лишь пробую изложить. Заключается она в том, что если для загрузки индикатора требуется и время, и ресурсы (с чем никто не и спорит), то желательно сделать это однократно при запуске программы, которая вызывает эти самые индикаторы. Т.е. в OnInit(). Образно говоря, "потерпеть пять минут при запуске основной программы, а потом спокойно пользоваться". В качестве контрпримера рассматривался реальный случай, когда пользователь запускал индикаторы с помощью iCustom чуть ли не на каждом тике.
Пустой терминал не означает отсутствия поднятых баз данных чартов(приходят тики и минутная база апдейтится). Удаление индикаторов освобождает ресурсы, но нужно принимать во внимание работу преаллоцируемых кешей и пулов памяти. Они не позволяют однозначно говорить "это стоит столько ресурсов".
В сложной системе, оптимизированной для максимальной производительности обычно используется правило "скорость в обмен на память". Так и в МТ5.
У меня вот этот тестовый скрипт съел всю мою свободную память ~5GB.
Для этого запускал его последовательно 7-8 раз.
Подождал обещанную минуту и ничего. Память не освободилась.
Видимо я чего-то не знаю, но такие объемы лучше высвобождать сразу, а то ПК виснет.
Код:
Вопрос немного не по теме... а что так тормозит iCustom? Вызываю её, правда, несколько десятков раз. Отчего загрузка пользовательского индикатора идёт очень долго...
Сделал профилирование кода, так на эти функции ушло под 97% времени...
В OnInit() вызываете?
Не все так просто и однозначно считается.
Я, собственно, поэтому и не оформлял ни каких претензий, просто поделился наблюдениями.
Свою проблему решил, оптимизировав вызов индикаторов, и отказавшись от ай-кастумов.
Ну, если в OnInit(), то, полагаю, вполне нормально. На форуме несколько раз поднималась тема про загрузку пользовательских индикаторов, в которой объяснялось, что при загрузке индикатора "поднимается", образно говоря, куча всяких пластов - данные/потоки и пр. Для такой загрузки требуется и время, и ресурсы...
Да, не обращал особого внимания, пока сам не столкнулся с этой проблемой. Про пласты, согласен.
...В связи с чем советовалось запускать в OnInit().