Графика в MetaTrader 5: Canvas - рисование внутри буфера с привязкой к объектам - страница 4

 
Renat: Нельзя выбрать что обновлять - работа идет на одном полотне, объекты многократно перекрываются и их может быть пара сотен тысяч. Не говоря уже о частичной прозрачности некоторых объектов.

Поэтому обновления требует все окно.

Значит, рано или поздно придется переписывать ChartRedraw(), чтобы сделать его быстрее. Особенно большим выигрыш должен стать именно на простынях с альфа-каналом и сотнями тысяч объектов примитивов.

P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".

 
Mathemat:

P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".

Значит процесс пошел. Значит поднялись темы нужные и интересные большинству.
 
Mathemat:

Значит, рано или поздно придется переписывать ChartRedraw(), чтобы сделать его быстрее. Особенно большим выигрыш должен стать именно на простынях с альфа-каналом и сотнями тысяч объектов примитивов.

P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".

Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.

Я лишь сделал ремарку по экстремально слабым ноутбукам, время которых уже прошло.

 
Renat:

Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.

Я лишь сделал ремарку по экстремально слабым ноутбукам, время которых уже прошло.

Подтверждаю. Сами кадры перевыплёвываются очень быстро - примерно как написал Ренат.

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

Работающий прототип уже сделал. Собсно скорость меня устраивает, даже учитывая замедление в разы.

// Мультки на mql5 писать пока не собираюсь, а для более медленных нужд скорости достаточно. :)

// Если захочу вывести что-то динамичное быстрее - просто отключу альфа канал.

 
MetaDriver:

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

Внутренний альфаканал в буфере не нужен - это больше смахивает или на мазохизм или на ошибку проектирования.

Нужен именно конечный альфаканал, который накладывает битмап на чарт. Эта операция у нас работает быстро и с применением видеоускорителей.

 
Renat: Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.

Да и без хорошей видяхи около 100 кадров/сек выходит, на голом Pentium G840 и с Update():

2012.03.25 23:59:15 2Alpha_Canvas-Test (EURUSD,H1) update = true: 90.56494412142948 frames/second


Интересно другое: как получается так, что два ядра загружены чуть менее, чем полностью? Никаких других активных процессов при запуске этого скрипта не было.


При одном потоке никак значительно больше 50% не должно получаться...

Расследуем дальше: отрубаем одно ядро в Task Manager. Получаем следующее:

2012.03.26 00:32:26 2Alpha_Canvas-Test (EURUSD,H1) update = true: 36.67167846272324 frames/second


Фреймов в секунду становится меньше, и даже не в 2 раза, а в 2.5! Картинка:


 
Mathemat:

Интересно другое: как получается так, что два ядра загружены чуть менее, чем полностью? Никаких других активных процессов при запуске этого скрипта не было.

При одном потоке никак значительно больше 50% не должно получаться...

С каких пор терминал стал однопоточным?

Откройте в таск менеджере колонку "Счетчик потоков", а учтите, что каждый эксперт/скрипт живет в отдельном потоке.

Интерфейсный поток занят независимой отрисовкой чарта, а параллельно ему независимо работает поток скрипта, который рисует в своем битмапе.

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


Кстати, в терминале появилась замечательная возможность обмениваться массивными данными между MQL5 программами через динамические ресурсы, а не только через глобальные переменные или события. Так как пространство имен динамических ресурсов общее, то любая программа может запросить по точному имени чужой ресурс.

 
Renat: С каких пор терминал стал однопоточным?

Ну вообще-то это приятная неожиданность...

Откройте в таск менеджере колонку "Счетчик потоков", а учтите, что каждый эксперт/скрипт живет в отдельном потоке.

А в МТ4 с этим как?

 
Mathemat:

А в МТ4 с этим как?

Немного похуже, но все равно примерно так же.

Хотя пока считается хоть один индюк, отклик от гуйни получить не получится.

 
TheXpert: Немного похуже, но все равно примерно так же.
Было такое исследование. Но оно касалось МТ5.
Причина обращения: