Включение визуальных тем/стилей XP снижает производительность

StackOverflow https://stackoverflow.com/questions/1849960

  •  13-09-2019
  •  | 
  •  

Вопрос

Пытаясь модернизировать внешний вид старого приложения C++Builder/Delphi, я включил визуальные темы (визуальные стили) и был удивлен тем, сколько новых тем было добавлено.Например, для нашей основной страницы настройки (диалог-монстр с 11 вкладками и 200 элементами управления, который мы не хотим переделывать прямо сейчас из-за времени разработки и затрат на переобучение):

  • Без включенных тем: ~0,1 сек. для создания формы и ее элементов управления (по данным QueryPerformanceCounter), ~0,9 секунды от щелчка по пункту меню до отображаемой формы (по секундомеру).Не особо заметно для конечного пользователя.
  • При включенных темах: ~0,6 сек. для создания формы и ее элементов управления, ~1,5 секунды от щелчка по пункту меню до отображаемой формы.Очень заметно для конечного пользователя.

Я получаю аналогичные результаты как на рабочем столе Windows XP, так и на виртуальной машине Windows 7.

Я понимаю, что есть шаги, которые я мог бы предпринять, чтобы улучшить этот конкретный случай (например, ленивую загрузку вкладок диалогового окна или полную его переработку), но типично ли для тем такое заметное снижение производительности?Есть ли какие-нибудь простые советы, как избежать этого снижения производительности?

Это было полезно?

Решение

Ух ты.Я не уверен, что когда-либо имел 200 элементов управления в одной форме.Вот несколько предложений.

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

  • Я бы также посмотрел, что происходит в конструкторе или событии OnShow.Заполняете ли вы какие-либо списки, где BeginUpdate/EndUpdate будет преимуществом?

  • Есть ли у вас какой-либо код в событии OnResize или аналогичном, который запускается более одного раза и может подождать до создания формы и запускаться один раз?

  • Какие элементы управления вы используете?Если один тип элемента управления рисует особенно медленно, вы можете заменить его на тот, который рисует быстрее.Однако это потребует некоторых испытаний.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top