а, ну тогда это вообще норм. У меня же тоже на гифке один канвас это панелька, и она меньше всего ресурсов отъедает, так как ее не нужно так часто перерисовывать и ловить момент прихода нового бара.
Dmitry Fedoseev: Нашел правильные файлы. Где какие цифры, куда и когда на них смотреть - непонятно, но и и без этого невооруженным взглядом видно, что канвас значительно тормознутее, притом что используется не просто канвас вместо одной леблы, а один канвас вместо кучи лейблов.
Запускаем эксперт CanvasVsLabels.mq5, выбираем, тип дисплея outType, включаем limit_fps, устанавливаем, nIterations, он по умолчанию равен 10000. Этого достаточно, можно не менять. Тогда результаты будут схожи с представленными здесь: https://www.mql5.com/ru/forum/364640/page11#comment_21301589.
Теперь о результатах. Min delay, Mid delay и Max delay, это, минимальное, среднее и максимальное, значения задержек за один проход, соответственно. Total, это общее время за все количество nIterations проходов.
Еще раз, привожу таблицу результатов сравнения
Сanvas unlimited fps
Canvas limited fps
Labels unlimited fps
Labels limited fps
Min delay (μs)
1530
1
18
0
Mid delay (μs)
7674
4086
48
7
Max delay (μs)
11967
11093
785
286
Total (μs)
77727510
29452299
39648984
27439654
Точно также замеры можно провести и в тестере, поскольку эксперт рассчитан на это. Но я их еще не проводил. Сделаю, когда будет свободное время. В дальнейшем планирую поэкспериментировать с дисплеем из множества БитмабЛейблов.
Еще раз публикую таблицу сравнения, но уже с гистограммами.
Сanvas unlimited fps
Canvas limited fps
Labels unlimited fps
Labels limited fps
Min delay (μs)
1530
1
18
0
Mid delay (μs)
7674
4086
48
7
Max delay (μs)
11967
11093
785
286
Total (μs)
77727510
29452299
39648984
27439654
Сравнение средних значений задержки за один проход
Которые почему-то оказались несопоставимыми с общим временем работы (Total)...
Сравнение общего времени работы
Замеры показали, что дисплей на основе Canvas с ограниченным FPS (Canvas unlimited FPS) по производительности немного медленнее дисплея на основе Лейблов с ограниченным FPS(Labels unlimited FPS). Но в целом они оба подходят для вывода информации из высоконагруженных процессов.
Как запустить эксперта для выполнения замеров
Выбираем outType из выпадающего списка Canvas или Labels
Включаем или отключаем limit_fps
Подтверждаем выбор
Для запуска замеров в чарте нажимаем кнопку Start
Точно таким же образом эксперт может делать замеры в визуальном тестере. Только диапазон дат в настройках тестера нужно выставить таким образом, чтобы баров в истории было не меньше, чем значение входного параметра nIterations.
Хотелось бы добавить более корректные замеры, сделанные с помощью нового эксперта в самое первое сообщение данной темы. Поскольку те замеры, что есть там на данный момент, некорректны. Но первое сообщение, к сожалению, уже отредактировать нельзя. Прошу модераторов добавить более корректные замеры в начало, а те что там сейчас есть оформить как неактуальные.
А смысл? Прям сейчас не охота копаться в кода. Как вычисляются эти показатели? Если уж так тестировать в тестере, то надо мерить общее время, затраченное на прогон и больше ничего, а не работу отдельных участков кода замерять. В крайнем случае инит не считать. И вот, без измерений видно, что канвас медленнее работает. Не знаю, может у меня аномалия какая...
А смысл? Прям сейчас не охота копаться в кода. Как вычисляются эти показатели? Если уж так тестировать в тестере, то надо мерить общее время, затраченное на прогон и больше ничего, а не работу отдельных участков кода замерять. В крайнем случае инит не считать. И вот, без измерений видно, что канвас медленнее работает. Не знаю, может у меня аномалия какая...
В коде копаться не охота. И поверить на слово тоже нет желания. :) Я прям не знаю, как вам объяснять. Рассказывать от начала до конца, как я писал весь код... Так это будет целая статья. :)
А в том, как эксперт делает замеры вообще нечего разбираться.
Total вычисляется по окончанию цикла, а min, mid и max в теле цикла, после display.push, display.setText и display.update. Ничего сложного, если посидеть и хорошенько всё рассмотреть, то можно добраться хоть до исходников Канваса и Лейблов. Там, кстати, тоже ничего сложного нет. Разве только за исключением методов, рисующих кривые Безье и им подобных, в Канвасе.
а, ну тогда это вообще норм.
У меня же тоже на гифке один канвас это панелька, и она меньше всего ресурсов отъедает, так как ее не нужно так часто перерисовывать и ловить момент прихода нового бара.
Супер! Все летает!
А на низкой скорости обновляется без пропусков.Нашел правильные файлы. Где какие цифры, куда и когда на них смотреть - непонятно, но и и без этого невооруженным взглядом видно, что канвас значительно тормознутее, притом что используется не просто канвас вместо одной леблы, а один канвас вместо кучи лейблов.
Запускаем эксперт CanvasVsLabels.mq5, выбираем, тип дисплея outType, включаем limit_fps, устанавливаем, nIterations, он по умолчанию равен 10000. Этого достаточно, можно не менять. Тогда результаты будут схожи с представленными здесь: https://www.mql5.com/ru/forum/364640/page11#comment_21301589.
Теперь о результатах. Min delay, Mid delay и Max delay, это, минимальное, среднее и максимальное, значения задержек за один проход, соответственно. Total, это общее время за все количество nIterations проходов.
Еще раз, привожу таблицу результатов сравнения
Точно также замеры можно провести и в тестере, поскольку эксперт рассчитан на это. Но я их еще не проводил. Сделаю, когда будет свободное время. В дальнейшем планирую поэкспериментировать с дисплеем из множества БитмабЛейблов.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Canvas vs Labels
fxsaber, 2021.03.13 19:26
ЗЫ Такой результат только у меня?
Отъедает 15-20%. Видимо, тормозная видеокарта.
Оказалось, что ResourceReadImage очень медленная. Избавился от нее - стала нулевая нагрузка.
Еще раз публикую таблицу сравнения, но уже с гистограммами.
Сравнение средних значений задержки за один проход
Которые почему-то оказались несопоставимыми с общим временем работы (Total)...
Сравнение общего времени работы
Замеры показали, что дисплей на основе Canvas с ограниченным FPS (Canvas unlimited FPS) по производительности немного медленнее дисплея на основе Лейблов с ограниченным FPS (Labels unlimited FPS). Но в целом они оба подходят для вывода информации из высоконагруженных процессов.
Как запустить эксперта для выполнения замеров
Точно таким же образом эксперт может делать замеры в визуальном тестере. Только диапазон дат в настройках тестера нужно выставить таким образом, чтобы баров в истории было не меньше, чем значение входного параметра nIterations.
Больше информации, а также исходники можно найти в описание библиотеки Chart Display: https://www.mql5.com/ru/code/33898
Библиотека специально модифицированная для замеров: https://www.mql5.com/ru/code/download/33898/chartdisplay.mqh
Универсальный эксперт для выполнения замеров: https://www.mql5.com/ru/code/download/33898/canvasvslabels.mq5
Более подробно смотрите в КБ: https://www.mql5.com/ru/code/33898
Хотелось бы добавить более корректные замеры, сделанные с помощью нового эксперта в самое первое сообщение данной темы. Поскольку те замеры, что есть там на данный момент, некорректны. Но первое сообщение, к сожалению, уже отредактировать нельзя. Прошу модераторов добавить более корректные замеры в начало, а те что там сейчас есть оформить как неактуальные.
Оказалось, что ResourceReadImage очень медленная. Избавился от нее - стала нулевая нагрузка.
Запускаем эксперт CanvasVsLabels.mq5...
А смысл? Прям сейчас не охота копаться в кода. Как вычисляются эти показатели? Если уж так тестировать в тестере, то надо мерить общее время, затраченное на прогон и больше ничего, а не работу отдельных участков кода замерять. В крайнем случае инит не считать. И вот, без измерений видно, что канвас медленнее работает. Не знаю, может у меня аномалия какая...
Серьёзно?
С вызовом было где-то 15% нагрузка, без - нулевая.
А смысл? Прям сейчас не охота копаться в кода. Как вычисляются эти показатели? Если уж так тестировать в тестере, то надо мерить общее время, затраченное на прогон и больше ничего, а не работу отдельных участков кода замерять. В крайнем случае инит не считать. И вот, без измерений видно, что канвас медленнее работает. Не знаю, может у меня аномалия какая...
В коде копаться не охота. И поверить на слово тоже нет желания. :) Я прям не знаю, как вам объяснять. Рассказывать от начала до конца, как я писал весь код... Так это будет целая статья. :)
А в том, как эксперт делает замеры вообще нечего разбираться.
Total вычисляется по окончанию цикла, а min, mid и max в теле цикла, после display.push, display.setText и display.update. Ничего сложного, если посидеть и хорошенько всё рассмотреть, то можно добраться хоть до исходников Канваса и Лейблов. Там, кстати, тоже ничего сложного нет. Разве только за исключением методов, рисующих кривые Безье и им подобных, в Канвасе.И вот, без измерений видно, что канвас медленнее работает. Не знаю, может у меня аномалия какая...
При этом нужно сказать, при каких входных параметрах Канвас медленный. Если limit_fps: false, то тогда понятно "и к гадалке не ходи"... :)
Оказалось, что ResourceReadImage очень медленная. Избавился от нее - стала нулевая нагрузка.
Если читаете из сохраненного во время компиляции ресурса, то это надо делать однократно.
Ресурсы при компиляции сжимаются.