Повышение скорости приложения WPF по удаленному рабочему столу?

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

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


person amazedsaint    schedule 17.06.2009    source источник
comment
Пользователи XP или Vista? Удаленный рабочий стол с WPF в XP довольно ужасен, поскольку растровое изображение создается на сервере и отправляется по сети клиенту.   -  person DavidK    schedule 17.06.2009
comment
К сожалению, пользователи используют xp   -  person amazedsaint    schedule 17.06.2009
comment
Сожалею, что у вас может быть неразрешимая проблема, если они на XP. Я знаю проект, в котором пришлось отклонить WPF, потому что они не могли найти способ обойти это. :-(   -  person DavidK    schedule 17.06.2009
comment
Хайме Родригес опубликовал сегодня некоторую информацию, которая может быть полезна для повышения производительности приложений при удаленном взаимодействии.   -  person rmoore    schedule 30.06.2009


Ответы (2)


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

ОБНОВЛЕНИЕ:
Джейми Родригес опубликует некоторые внутренние обсуждения на WPF в Microsoft. Сегодня было новое сообщение, которое включает советы и обсуждения по производительность при удаленном взаимодействии.

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

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

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

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

  • Грязные регионы должны быть как можно меньше, чтобы по сети передавалось наименьшее количество данных.
  • Ambient animations should be turned off
    • For instance, setting a window background to an animating gradient would cause the entire window to be invalidated / redrawn every frame
  • The system does not optimize away occluded parts of the application
    • For instance, an animation that is completely hidden behind some other opaque element will still cause dirty region invalidation / bitmap generation to occur. Remove these from your application.
  • Dirty regions should be created as infrequently as possible
    • Turn off as many animations as possible
    • Для тех анимаций, которые нельзя полностью удалить, уменьшите частоту кадров анимации с помощью свойства DesiredFramerate.
  • Dirty Region Bitmaps should be as simple as possible to maximize their compression
    • Application running over TS should favor solid colors over gradients or other exotic fills (unnecessary images, etc), especially for application pieces that will be redrawn frequently
  • Avoid operations that are especially slow when rendered in software
    • BitmapEffects / Effects / ShaderEffects, especially blurs and drop shadows with large radii, are quite slow in software
    • 3D - программный растеризатор 3D значительно медленнее, чем аппаратный рендеринг.
person rmoore    schedule 17.06.2009
comment
Мы говорим о производительности удаленного рабочего стола. При запуске из коробки с прямым настольным компьютером он работает хорошо. - person amazedsaint; 17.06.2009
comment
Да, но все еще зависит от рендеринга пользовательского интерфейса. Проблемы с производительностью только усугубляются. Повторная загрузка крупной графики и элементов управления также сильно ударит. Проверьте здесь аналогичное обсуждение. stackoverflow.com/questions/198030/ - person rmoore; 17.06.2009
comment
Актуально ли это после .NET 4.5 и Windows 10? Я помню, как несколько лет назад я читал что-то, в котором говорилось, что с тех пор Microsoft отключила оптимизацию специально для RDP, поскольку они добавляют сложности, которая больше не нужна, поскольку у большинства людей соединения с достаточно высокой пропускной способностью. - person Dai; 25.01.2019

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

person Ana Betts    schedule 17.06.2009