В настоящее время я работаю с назначением клиента, связанным с проблемами производительности в приложении LOB с большим количеством ресурсов WPF.WPF Performance. Неправильный расчет грязных прямых
Проблема в том, что приложение работает очень медленно/вяло. Особенно обработка таблиц данных (прокрутка, сортировка, выбор) происходит крайне медленно и делает приложение непригодным для использования.
Я проанализировал состояние системы, когда одна вкладка, содержащая несколько текстовых полей, выпадающих списков и меток, открывается и остается бездействующей (ожидая ввода пользователя).
Это мои выводы:
- Все рендеринга рассчитывается на GPU
- Там нет производительности тяжелых функций, таких как анимация, растровые эффекты, прозрачность и т.д.
- Когда вкладка (только курсор мигает в сфокусированном текстовом поле, остальная часть вкладки статична и даже не содержит каких-либо данных), графический процессор работает до 90%
- GPU падает до 0, когда вкладка теряет фокус.
- Процент GPU напрямую зависит от размера окна. Небольшое окно доводит его до нескольких процентов, полный экран приближается к почти 100%
- WPF Perforator сообщает мне, что WPF вычисляет грязную область для всего вклада, а не только мерцающий курсор
- Отчеты WPF Perforator грязные скорости обновления прямоугольник больше, чем 20/с на вкладке ожидания, и они непосредственно коррелируют с использованием GPU
Мой вывод: в процессе разработки много пользовательского кода (макет, обработку событий и т.д ..) был введен чтобы соответствовать WPF для архитектуры, основанной на бэкэнд системы в целом. Я предполагаю, что из-за того, что какой-то пользовательский код был испорчен механизм WPF. Это приводит к слишком большому объему рисования и, следовательно, к очень высокому использованию графического процессора. Эти необходимые действия приводят к проблемам, описанным выше.
Теперь я ищу любой совет, где я должен начать свое расследование. Или, другими словами: каковы типичные ошибки, которые может сделать разработчик для того, чтобы разбить алгоритм обновления Flash WPF. Любой вход высоко оценен.
Большое спасибо и с наилучшими пожеланиями!
Manuel
Я не думаю, что это связано с рендерингом и т. Д. Убедитесь, что все ваши ItemsControls виртуализированы. Опубликуйте соответствующий код и XAML проблемных частей приложения. –
BTW Я понятия не имею, что вы подразумеваете под «backend-driven». Схема WPF выполняется в XAML. Если бы они делали ужасные winforms-подобные манипуляции элементами пользовательского интерфейса в процедурных кодах (это то, что делают большинство людей), то будут неожиданные отрицательные результаты. WPF не поддерживает разработчиков с менталитетом winforms. –