Повышение скорости работы приложений WPF через удаленный рабочий стол? - PullRequest
4 голосов
/ 17 июня 2009

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

Есть предложения по улучшению взаимодействия с пользователем в этом сценарии? Одной из причин может быть отключение любых анимаций / раскадровок и избегание использования градиентов в пользовательском интерфейсе. Больше мыслей приветствуется.

Ответы [ 2 ]

9 голосов
/ 17 июня 2009

Для градиентов это не такая большая проблема, как несколько слоев рендеринга, например, если у вас есть куча вложенных элементов управления, все они частично непрозрачны. Ознакомьтесь с доступными руководствами WPF Performance Optimization . Там много информации, которую можно переварить, но с советами по рендерингу и инструментами производительности вы определенно сможете внести некоторые улучшения.

UPDATE:
Джейми Родригес опубликует некоторые внутренние обсуждения WPF в Microsoft. Сегодня появилось новое сообщение, в котором содержатся советы и обсуждения производительности при удаленном взаимодействии .

Все версии WPF, начиная с WPF 3.5 с пакетом обновления 1 (SP1), были удалены (как с удаленного рабочего стола, так и с сервером терминалов), используя Bitmap Remoting.

Удаленное растровое изображение работает следующим образом:

  • Приложение отображается на сервере с использованием программного растеризатора WPF
  • При запуске приложения сервер отслеживает, какие области окна приложения были недавно загрязнены и требуют обновления
  • Когда необходимо обновить регион, сервер создает сжатое растровое изображение только грязной области и отправляет его клиенту
  • После того, как клиент нарисовал это растровое изображение в соответствующем месте в своем собственном окне, окно клиента обновляется

Учитывая, как работает этот механизм удаленного взаимодействия, производительность можно максимизировать несколькими способами:

  • Грязные области должны быть как можно меньше, чтобы по проводам передавалось наименьшее количество данных
  • Окружающие анимации должны быть отключены
    • Например, установка фонового окна с анимирующим градиентом приведет к тому, что все окно будет недействительным / перерисовывается каждый кадр
  • Система не оптимизирует удаленные части приложения
    • Например, анимация, которая полностью скрыта за каким-либо другим непрозрачным элементом, все равно будет вызывать аннулирование грязной области / генерирование растрового изображения. Удалите их из своего приложения.
  • Грязные районы должны создаваться как можно реже
    • Отключите как можно больше анимаций
    • Для тех анимаций, которые невозможно полностью удалить, уменьшите частоту кадров анимации с помощью свойства DesiredFramerate
  • Битовые карты грязного региона должны быть максимально простыми, чтобы максимизировать их сжатие
    • Приложение, работающее над TS, должно отдавать предпочтение сплошным цветам, а не градиентам или другим экзотическим заливкам (ненужные изображения и т. Д.), Особенно для частей приложения, которые будут часто перерисовываться
  • Избегайте операций, которые особенно медленны при визуализации в программном обеспечении.
    • BitmapEffects / Effects / ShaderEffects, особенно размытие и падающие тени с большими радиусами, довольно медленные в программном обеспечении
    • 3D - программный растеризатор 3D значительно медленнее, чем аппаратный рендеринг
0 голосов
/ 17 июня 2009

Вы можете запросить уровень производительности WPF (http://msdn.microsoft.com/en-us/library/ms742196.aspx)) и при необходимости укорочить анимацию / графический трюк, чтобы ваше приложение по-прежнему отлично выглядело локально, в то время как работает быстро по RDP.

...