Ошибки, баги, вопросы - страница 975

 

Каюсь, был неправ. Производительность битмапа уступает меткам на 16%-25% (в зависимости от числа элементов), но не на порядок, как писал ранее.

Вероятно, при первом освоении инструмента в коде были ошибки/неэффективности.

Код прилагаю.

 

tol64

Поверьте, у меня нет ни единого мотива обманывать Вас = себя. В первом моём эксперименте я наблюдал битмап в тестере. К сожалению, воспроизвести не получается. :(

Файлы:
 
voix_kas:

...

tol64

Поверьте, у меня нет ни единого мотива обманывать Вас = себя. В первом моём эксперименте я наблюдал битмап в тестере. К сожалению, воспроизвести не получается. :(

Ладно. Ждём, когда разработчики реализуют эту возможность и потом протестируем, как следует. )))
 

Хотелось бы также обратить внимание разработчиков на различия в отображении шрифтов:


Слева - битмап, справа - метки. У битмапа отрисовка шрифта чуть более жирновата, хотя все настройки одинаковы.

 

Вопрос не критичный. Но для порядку обратить внимание надо. :)

 
voix_kas:

Хотелось бы также обратить внимание разработчиков на различия в отображении шрифтов

Слева - битмап, справа - метки. У битмапа отрисовка шрифта чуть более жирновата, хотя все настройки одинаковы.

Вопрос не критичный. Но для порядку обратить внимание надо. :)

А какой Флаг для задания толщины шрифта Вы использовали для битмапа ?
 
voix_kas:

Каюсь, был неправ. Производительность битмапа уступает меткам на 16%-25% (в зависимости от числа элементов), но не на порядок, как писал ранее.


нет.  все же у вас тест некорректен.

Вы используете ChartRedraw после каждого изменения. То есть фактически вы тестируете 10000 раз ChartRedraw. Это неверно.

Задача ведь - узнать что модифицируется быстрее - метки или битмап. А не их последующий вывод на чарт.

вот результаты теста если оставить ChartRedraw внутри цикла.

Время обновления битмапа=40980.
Время обновления меток = 41777.

(то есть битмап даже чуток быстрее, чем метки)

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

---

Если же убрать ChartRedraw из цикла, то получим абсолютно другие цифры

Время обновления битмапа=5788.
Время обновления меток = 234.

то есть терминал с меткам работает в 20 раз быстрее битмапа


и тут конечно уже можно видеть зависимость высоты битмапа. для 100 меток:

Время обновления битмапа=51355.
Время обновления меток = 1108. 
разница в 50 раз

а вот вам битмап  - размером 250*20.  то есть координаты меток не меняем. просто вывод всей сотни в одну точку.

получим

Время обновления битмапа=25054.

разница с сотней меток в 25 раз.


То есть как видите битмап  реально медленная особа, что касается работы с ней.  процесс рисования медленный.

однозначно, что постоянная цикличная работа с массивами + WinGdi TextOut + создания ResourceCreate = уступает родным объектам МТ минимум на порядок, а то и в 50 раз.

поэтому от МТ объектов отказываться никак нельзя.  НО и про битмап забывать тоже нельзя. Так как он вероятно будет очень удобен для рисования графиков и гистограмм.

Документация по MQL5: Операции с графиками / ChartRedraw
Документация по MQL5: Операции с графиками / ChartRedraw
  • www.mql5.com
Операции с графиками / ChartRedraw - Документация по MQL5
 
tol64:
А какой Флаг для задания толщины шрифта Вы использовали для битмапа ?

По-умолчанию - 0, я его не задаю явно. В приложенных исходниках это видно.

Дополнительная "игра" с разными флагами также не привела к получению единообразия.

 
sergeev:

...

Задача ведь - узнать что модифицируется быстрее - метки или битмап. А не их последующий вывод на чарт.

... 

Удаление из цикла функции ChartRedraw() - некорректно, ибо "атомарная операция" изменения свойства текстовой метки никак не обрабатывается видео-движком терминала.

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

Эту гипотезу строго подтверждает профилировщик кода на скрипте с текстовыми метками.

 

Что касается битмапа, то "узкое горлышко" в нём - функция TextOut().

 
voix_kas:

...

Что касается битмапа, то "узкое горлышко" в нём - функция TextOut().

Вот так наглядней будет: ))

 

 
tol64:

Вот так наглядней будет: ))

Согласен. :)

 

sergeev:

...

вот результаты теста если оставить ChartRedraw внутри цикла.

Время обновления битмапа=40980.
Время обновления меток = 41777.

(то есть битмап даже чуток быстрее, чем метки)

 Странно, у меня обратная картина:

 

 

Argb_normalize лучше не использовать, так как это дает дополнительные расходы на нормализацию цвета. Лучше рисовать чистым цветом простые вещи.

Еще на скорость прямо и сильно влияет видеокарта, так как мы вовсю пользуемся ее 2D функциями. Например, на слабых ноутбуках с простейшими видеокартами отрисовка медленная и разница в методах вывода большая.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
Причина обращения: