Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Скорость, вероятно, можно отодвинуть на второй план, а оптимизация под скорость - это не то, что можно сделать быстро, пока что лучше улучшить функциональность.
@Nikolai Semko
Николай, сейчас неожиданно пришел ответ на вопрос "почему так долго рисует канвас".
Окна ведь, состоят из двух канвасов! Эти канвасы почти равной величины. Значит площадь рисования нужно умножать на два. Но, это только начало.
На пространстве окон бывают большие элементы с прокруткой (V_BOX), которые тоже рисуются полностью заполняясь исходным цветом. То есть, если V_BOX занимает основную часть окна, площадь рисования нужно умножать на три. Но! у него дополнительный канвас. На том канвасе прокручивается изображение. Основание элемента являет только полосу прокрутки. Короче - площадь рисования нужно умножать на четыре (тем более, если прокрутка длинная). И только потом, рисуются элеметны.
Казалось бы все... Можно поставить точку. Умножаем площадь окна на три или на четыре. Но нет!
Сами элементы тоже многослойны. У каждого основание. Основание всегда рисуется с нуля, заполняясь исходным цветом. Затем поверх основания рисуются рамки. Далее, поверх уже нарисованных частей элемента, рисуются иконки. И в конце поверх всего рисуются тексты.
В итоге, пользователь видит лишь конечный цвет на каждом конкретном пикселе. Но на месте этого пикселя цвета менялись по несколько раз, по мере отрисовки всего окна.
А теперь умножим это на 15 окон... Становится понятно, что никакого особого бага в коде нет - я специально замерил скорость выполнения частей блока рисования, и 50 мс на полный экран у меня работает тоже. Просто экранов в итоге получается гораздо больше.
Есть идея как изменить код и ускорить отрисовку в 2- 3 раза. Но займусь этим после основной работы.
Хочу поблагодарить тебя за то что настоял на проверке кода. Ты был прав. Тот случай, когда критика пошла на пользу.
Также, спасибо @Andrey Barinov за подсказку с текстом. Может смогу что то придумать.
@Nikolai Semko
...и 50 мс на полный экран у меня работает тоже. ...
Проверка приблизительная. Замерил скорость открытия окна с тремя канвасами почти равной величины (окно иконок). Получилось ~70 мс. Если суммировать площать всех канвасов (без элементов), то как раз примерно, получится площадь экрана лэптопа 17". Это не включая площадь основания элементов и самих иконок, которые были нарисованы поверх канваса. Поэтому да, ~50мс на заполнение цветом площади условного полного экрана. Пока не стал точно мерить. Зачем, когда "слон" прямо посреди комнаты? :)
Про 50 мс я говорил, как чрезмерно перегруженный и не оптимизированный интерфейс. Нормально 3-10 мс
Ты как Штирлиц, который не хотел ехать на картошку.
Нужно глубокое исследование циклов внутри блока рисования. Поверхностное профилирование не дает полной картины. Но и так ясно в чем суть. Писал здесь #553
. Думаю, не ошибаюсь.
(черновой вариант блока рисования, использую для тестов)