Для градиентов это не такая большая проблема, как несколько слоев рендеринга, например, если у вас есть куча вложенных элементов управления, все они частично непрозрачны. Ознакомьтесь с доступными руководствами WPF Performance Optimization . Там много информации, которую можно переварить, но с советами по рендерингу и инструментами производительности вы определенно сможете внести некоторые улучшения.
UPDATE:
Джейми Родригес опубликует некоторые внутренние обсуждения WPF в Microsoft. Сегодня появилось новое сообщение, в котором содержатся советы и обсуждения производительности при удаленном взаимодействии .
Все версии WPF, начиная с WPF 3.5 с пакетом обновления 1 (SP1), были удалены (как с удаленного рабочего стола, так и с сервером терминалов), используя Bitmap Remoting.
Удаленное растровое изображение работает следующим образом:
- Приложение отображается на сервере с использованием программного растеризатора WPF
- При запуске приложения сервер отслеживает, какие области окна приложения были недавно загрязнены и требуют обновления
- Когда необходимо обновить регион, сервер создает сжатое растровое изображение только грязной области и отправляет его клиенту
- После того, как клиент нарисовал это растровое изображение в соответствующем месте в своем собственном окне, окно клиента обновляется
Учитывая, как работает этот механизм удаленного взаимодействия, производительность можно максимизировать несколькими способами:
- Грязные области должны быть как можно меньше, чтобы по проводам передавалось наименьшее количество данных
- Окружающие анимации должны быть отключены
- Например, установка фонового окна с анимирующим градиентом приведет к тому, что все окно будет недействительным / перерисовывается каждый кадр
- Система не оптимизирует удаленные части приложения
- Например, анимация, которая полностью скрыта за каким-либо другим непрозрачным элементом, все равно будет вызывать аннулирование грязной области / генерирование растрового изображения. Удалите их из своего приложения.
- Грязные районы должны создаваться как можно реже
- Отключите как можно больше анимаций
- Для тех анимаций, которые невозможно полностью удалить, уменьшите частоту кадров анимации с помощью свойства DesiredFramerate
- Битовые карты грязного региона должны быть максимально простыми, чтобы максимизировать их сжатие
- Приложение, работающее над TS, должно отдавать предпочтение сплошным цветам, а не градиентам или другим экзотическим заливкам (ненужные изображения и т. Д.), Особенно для частей приложения, которые будут часто перерисовываться
- Избегайте операций, которые особенно медленны при визуализации в программном обеспечении.
- BitmapEffects / Effects / ShaderEffects, особенно размытие и падающие тени с большими радиусами, довольно медленные в программном обеспечении
- 3D - программный растеризатор 3D значительно медленнее, чем аппаратный рендеринг