Canvas vs Labels - страница 9

 
В 100 раз вывод текста в лэйбл быстрее вывода в канвас, притом, что канвас даже не очищал, а лепил текст на текст.
 
Alexey Viktorov:

Дмитрий, прежде чем судить чего-то надо понимать с чего всё началось…

Если не ошибаюсь, где-то дальше говорилось о пятидесяти строках…

А с чего все началось? С отрыва от реальности?

 
Dmitry Fedoseev:
В 100 раз вывод текста в лэйбл быстрее вывода в канвас, притом, что канвас даже не очищал, а лепил текст на текст.

Скоро я представлю тесты, где и Канвас будет достаточно быстрым. А также обновлю соответствующие исходники в КБ. Всё дело в ограничении количества обновлений на единицу времени, как я позже узнал. Смотрите посты выше, там это обсуждалось. Начните с данного сообщения: https://www.mql5.com/ru/forum/364640/page6#comment_21290218.

 
Mihail Matkovskij:

Скоро я представлю тесты, где и Канвас будет достаточно быстрым. А также обновлю соответствующие исходники в КБ. Всё дело в ограничении количества обновлений на единицу времени, как я позже узнал. Смотрите посты выше, там это обсуждалось. Начните с данного сообщения: https://www.mql5.com/ru/forum/364640/page6#comment_21290218.

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

 
Даже чисто тупое сравнение только одного вызова TextOut() по сравнению с выводом текста в лэйбл раз в 70 медленнее.
 
Dmitry Fedoseev:

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

Dmitry Fedoseev:
Даже чисто тупое сравнение только одного вызова TextOut() по сравнению с выводом текста в лэйбл раз в 70 медленнее.

Если не хотите или не можете разобраться, то привожу вам цитату:

Renat Fatkhullin:

Николай прав - редактирование свойств лейблов не имеет никакого отношения к отрисовке лейбла.

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

А вот отрисовку в канвасе замерить легко, так как она производится прямо в потоке робота и потом во время независимой отрисовки чарта остается сделать нативный BitBlit готового битмапа в контекст окна. Эта операция элементарная и хорошо ускоряется видеокартой.

В текстовых лейблах SetFont/TextOut в TTF шрифтах достаточно дорогой.
 
Mihail Matkovskij:

Если не хотите или не моете разобраться, то вам цитату:

А я вам уже ответил здесь

 
Dmitry Fedoseev:

А я вам уже ответил здесь

Будете спорить с директором компании MetaQuotes?

 
Mihail Matkovskij:

Будете спорить с директором компании MetaQuotes?

У нас нет разногласий.

 
Dmitry Fedoseev:
Даже чисто тупое сравнение только одного вызова TextOut() по сравнению с выводом текста в лэйбл раз в 70 медленнее.

Это потому, что отрисовка чарта осуществляется в отдельном потоке. В то время как обработка массива пикселей для OBJ_BITMAP_LABEL в том же потоке, что и использующее его приложение, а также передача пикселей битмапу. Поэтому OBJ_BITMAP_LABEL может замедлять работу приложения, но несущественно, если не обновлять битмап слишком часто. Как раз в моих предыдущих тестах OBJ_BITMAP_LABEL давал существенное замедление по этой же причине. Но если ограничить частоту обновлений битмапа, то результат будет даже лучше, чем с лейблами. А если ограничить частоту обновлений лейблов, то они будут работать немного быстрее OBJ_BITMAP_LABEL (за счёт отрисовки в отдельном потоке). Просто, нет никакого смысла обновлять объекты чаще, чем способен воспринимать человеческий глаз. Отсюда и тормоза, всех объектов чарта при слишком частом их обновлении.

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