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

 
Я тоже проведу тесты и распишу результаты.
 
voix_kas:

...

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

У меня вот такой резалт:

 

Интересно посмотреть.
 

Совсем забыл, что при тестах меток отрисовка полностью выводится из системы MQL5 и рисуется в интерфейсном потоке. В MQL5 лишь производится модификация описаний меток.

А вот при отрисовке битмапа практически вся работа производится внутри MQL5 и в интерфейсном потоке остается лишь очень быстрый одиночный BitBlt.

 То есть, тестирование полностью некорректное, так как вообще не тестируется отображение меток. Рефреш чарта - это асинхронная команда, которая лишь посылает уведомление интерфейсному потоку отрисоваться. Что и видно по скриншоту с затратами на ChartRedraw.

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

Альфа-канал подкупает эстетикой. Когда текст "прозрачно" отображается на фоне графика/баров. Напрашивается очевидной вывод о разделении областей применения.

Если нужно просто вывести сообщение/статистику - быстрее текстовая метка. В случае создания элементов управления (например, кнопочки) - битмап, причём, без вариантов. Тогда и можно без особого разочарования заливать всю прямоугольную область сплошным цветом, без альфа-канала/прозрачности.

 
voix_kas:

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

ага, ровно как и не обрабатывается видео-движком работа с массивом.

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

создание битмапа проигрывает - это однозначно.

а отрисовка чарта в обоих случаях вопрос спорный и второстепенный.


вы сами вдумайтесь в результат. вы же видите, что 4 сенкунды на один цикл изменения меток ???? это нонсенс. 

изменения меток надо проверять чисто на изменение, не подмешивая подсистему отрисовки чарта.

иначе вы увидите сопоставимые цифры с битмапом.

 
Renat:

Совсем забыл, что при тестах меток отрисовка полностью выводится из системы MQL5 и рисуется в интерфейсном потоке. В MQL5 лишь производится модификация описаний меток.

А вот при отрисовке битмапа практически вся работа производится внутри MQL5

но при этом метка все равно по скорости меняется быстрее, чем битмап. По причине медленной GDI функций.

 То есть, тестирование полностью некорректное, так как вообще не тестируется отображение меток. Рефреш чарта - это асинхронная команда, которая лишь посылает уведомление интерфейсному потоку отрисоваться. Что и видно по скриншоту с затратами на ChartRedraw.

вот именно. 


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

- рисование графика (например синусоиды) с помощью толпы меток (rectangle) и с помощью битмапа.
- рисование эксель-таблицы (rectangle+text label) и в виде битмапа.

ну и другие варианты, где МТ графику можно заменить битмапом.

нужно проверить расходы ресурсов на поддержку одного битмапа и толпы МТ объектов. + зависимость от размеров заполняемых областей.

 

Еще по тесту меток видно, что идет очень экономичная односторонняя работа с метками на запись без чтения. В этом случае происходит максимально быстрая конвейеризация потока команд за запись (мы специально используем эффективную систему в этом случае).

А вот если вперемешку с записью использовать чтение данных объектов, что часто бывает в реальной работе, то скорость кардинально упадет.

Апдейт: Еще в примере теста меток есть критическая ошибка - модификация идет только одной метки, а не 26. Посмотрите на исходник.

 
Renat:

То есть, тестирование полностью некорректное, так как вообще не тестируется отображение меток.

sergeev:

изменения меток надо проверять чисто на изменение, не подмешивая подсистему отрисовки чарта.

Я, конечно, не соглашусь. Аргумент: пользователю желательно видеть изменение ситуации (статистику) максимально часто, на каждом тике. Поэтому после обновления стат.данных, их надо показывать = ChartRedraw().

Это, так сказать, с точки зрения непосредственного прикладного/практического характера производительности.

 

Что касается сферических бенчмарков в вакууме - это факультатив.

 
sergeev:

но при этом метка все равно по скорости меняется быстрее, чем битмап. По причине медленной GDI функций.

Нет, при модификации меток не вызываются никакие GDI методы. Отрисовки в мкл5 вообще у меток не происходит!
 
Renat:

Еще в примере теста меток есть критическая ошибка - модификация идет только одной метки, а не 26. Посмотрите на исходник.

Текст меняется во всех (половине) метках, предназначенных для отображения именно значения показателя, а не его описания. При запуске скрипта это видно.

Либо я Вас не понял. О какой конкретно строке идёт речь? 

Причина обращения: