Галерея UI написанных на MQL - страница 56

 
Скорость, вероятно, можно отодвинуть на второй план, а оптимизация под скорость - это не то, что можно сделать быстро, пока что лучше улучшить функциональность.
 
hini #:
Скорость, вероятно, можно отодвинуть на второй план, а оптимизация под скорость - это не то, что можно сделать быстро, пока что лучше улучшить функциональность.
Ну, кодеру всегда приятно повышать скорость. А в общем, согласен. Это разумно. Правильная расстановка приоритетов в разработке очень важна. Особенно в таких больших проектах. Мне было важно знать насколько скорость важна для пользователей. Так сказать, получить фидбек. Самоцельное ускорение не входило в начальные планы. Просто хотел, чтобы смотря на интерфейс пользователи не кривились от лагов. :)

Конечно, функциональность элементов у меня по прежнему на первом месте. Движок, элементы, баги. Это главное.
 

@Nikolai Semko 

Николай, сейчас неожиданно пришел ответ на вопрос "почему так долго рисует канвас".

Окна ведь, состоят из двух канвасов! Эти канвасы почти равной величины. Значит площадь рисования нужно умножать на два. Но, это только начало.

На пространстве окон бывают большие элементы с прокруткой (V_BOX), которые тоже рисуются полностью заполняясь исходным цветом. То есть, если V_BOX занимает основную часть окна, площадь рисования нужно умножать на три. Но! у него дополнительный канвас. На том канвасе прокручивается изображение. Основание элемента являет только полосу прокрутки. Короче - площадь рисования нужно умножать на четыре (тем более, если прокрутка длинная).  И только потом, рисуются элеметны.

Казалось бы все... Можно поставить точку. Умножаем площадь окна на три или на четыре. Но нет!

Сами элементы тоже многослойны. У каждого основание. Основание всегда рисуется с нуля, заполняясь исходным цветом. Затем поверх основания рисуются рамки. Далее, поверх уже нарисованных частей элемента, рисуются иконки. И в конце поверх всего рисуются тексты.

В итоге, пользователь видит лишь конечный цвет на каждом конкретном пикселе. Но на месте этого пикселя цвета менялись по несколько раз, по мере отрисовки всего окна.


А теперь умножим это на 15 окон... Становится понятно, что никакого особого бага в коде нет - я специально замерил скорость выполнения частей блока рисования, и 50 мс на полный экран у меня работает тоже. Просто экранов в итоге получается гораздо больше. 


Есть идея как изменить код и ускорить отрисовку в 2- 3 раза. Но займусь этим после основной работы.

Хочу поблагодарить тебя за то что настоял на проверке кода. Ты был прав. Тот случай, когда критика пошла на пользу.

Также, спасибо @Andrey Barinov за подсказку с текстом. Может смогу что то придумать.

Nikolai Semko - BeeXXI Corporation
Nikolai Semko - BeeXXI Corporation
  • 2024.07.15
  • www.mql5.com
Профиль трейдера
 
Реter Konow #:

@Nikolai Semko 

...и 50 мс на полный экран у меня работает тоже. ...

Проверка приблизительная. Замерил скорость открытия окна с тремя канвасами почти равной величины (окно иконок).  Получилось ~70 мс. Если суммировать площать всех канвасов (без элементов), то как раз примерно, получится площадь экрана лэптопа 17". Это не включая площадь основания элементов и самих иконок, которые были нарисованы поверх канваса. Поэтому да, ~50мс на заполнение цветом площади условного полного экрана. Пока не стал точно мерить. Зачем, когда "слон" прямо посреди комнаты? :)

 
Про 50 мс я говорил, как чрезмерно перегруженный и не оптимизированный интерфейс. Нормально 3-10 мс

Все же сделай профилирование. Сделаешь много открытий в своем коде.
 
Nikolai Semko #:
Про 50 мс я говорил, как чрезмерно перегруженный и не оптимизированный интерфейс. Нормально 3-10 мс

Все же сделай профилирование. Сделаешь много открытий в своем коде.
Николай, это просто цифры. Нужна конкретика. Размер экрана, хотя бы. Тогда можно сделать точные расчеты.
 
Рисование на канвасе, это инициализация массива. Узнать максимальную скорость легко, - функция с циклом заполнения массива ее выявит. Размер массива должен соответствовать сумме пикселей условного экрана. 
 
Ты как Штирлиц, который не хотел ехать на картошку.
Сделай профилирование...
 
Nikolai Semko #:
Ты как Штирлиц, который не хотел ехать на картошку.
Сделай профилирование...
Да делал я. Щас гифку скину. 
 


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

. Думаю, не ошибаюсь.

(черновой вариант блока рисования, использую для тестов)
Галерея UI написанных на MQL
Галерея UI написанных на MQL
  • 2024.07.28
  • hini
  • www.mql5.com
Недавно наводя порядок в своем старом лаптопе, случайно наткнулся на затерявшийся в дебрях директорий фолдер. Не долго думая кликнул на него. А там...