Как ускорить программы WPF?
Мне нравится программировать и для Windows Presentation Framework. В основном я пишу браузерные приложения, используя WPF и XAML.
Но меня действительно раздражает медленность WPF. Простая страница с несколькими контрольными элементами загружается достаточно быстро, но как только страница будет более сложной, но она будет сложнее, например, содержать много полей ввода данных, один или два элемента управления вкладками и прочее, становится болезненным.
Загрузка такой страницы может занять более одной секунды. Секунды, действительно, особенно на не очень быстрых компьютерах (читай: компьютеры клиентов), это может занять годы.
То же самое с изменением значений на странице. Все об интерфейсе WPF как-то неаккуратно.
Это так скучно! Они дают мне эту прекрасную структуру, но делают ее настолько мучительно медленной, поэтому я должен буду извиняться перед нашими клиентами все время!
Мой вопрос:
- Как ускорить WPF?
- Как вы определяете узкие места?
- Как вы справляетесь с медлительностью?
Поскольку это, кажется, универсальная проблема с WPF, я ищу общие советы, полезные для многих ситуаций и проблем.
Некоторые другие связанные вопросы:
Ответы
Ответ 1
-
Как ускорить WPF?
Часто после использования одного из следующих инструментов профилирования очевидно, что вызывает мои узкие места.
- Если проблема с памятью, я виртуализую свои данные.
- Если время рендеринга является проблемой, я виртуализую элементы управления или упрощаю шаблоны управления, где это возможно.
- Если время обработки - проблема, я пытаюсь улучшить свой алгоритм или переместить эту работу в фоновый поток и показать throbber в моем ui во время работы.
-
Как вы определяете узкие места?
-
Как вы справляетесь с медлительностью?
Профилирование и консультирование.
Ответ 2
Установить пакет обновления 1 (SP1). Для WPF загружаются очень крутые показатели производительности.
Подробнее здесь
Вот пример 2 улучшений, сделанных в SP1: Деффицированная прокрутка и переработка элементов пользовательского интерфейса!!!
Ответ 3
Я не могу добавлять комментарии, поэтому я публикую новый ответ на этот вопрос: я нашел это видео с pdc09, которое дает некоторые идеи о том, как профилировать приложения wpf, и потому, что это помогло мне, я хочу поделиться ссылка:
Расширенная настройка и анализ производительности приложений WPF
Ответ 4
Вы пытаетесь использовать WPF PerfTool вместо того, что в VS?
Ответ 5
WPF предназначен для компьютеров с современными видеокартами. У ваших клиентов есть современные графические карты, способные управлять Aero? Если ваши клиенты имеют более старые графические карты, WPF вернется к программному рендерингу, который работает очень медленно по сравнению с аппаратной ускоренной графикой.
Вам также может понадобиться профилировать ваше приложение, чтобы убедиться, что на самом деле это WPF, который является медленной частью. Возможно, что есть что-то еще, что на самом деле является узким местом.
Ответ 6
избежать анимации также помогает много иногда. если вам нужно использовать анимацию, уменьшите частоту кадров, это улучшит производительность "Feeled".
Ответ 7
Удалить эффекты альфа-прозрачности/растрового изображения.
Ответ 8
можете ли вы дать более подробную информацию?
Я заметил только медленную производительность, когда я использую нечто вроде списка или сетки, которая имеет некоторую сложность. Решение состоит в том, чтобы упростить его.
Кроме этого, я заметил только медленную производительность при первой загрузке приложения.
НТН
Ответ 9
Я считаю полезным использовать шаг XAML и писать весь интерфейс в С#. Это позволяет мне точно контролировать, когда элементы управления создаются и загружаются. Это также помогает мне понять, что делает XAML "под обложками".