Вопрос по wpf, .net, windows – Повышение скорости работы приложений WPF через удаленный рабочий стол?

4

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

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

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

Ваш Ответ

2   ответа
9

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

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

All versions of WPF since WPF 3.5 SP1 have remoted (both with Remote Desktop and Terminal Server) using Bitmap Remoting.

Bitmap remoting works as follows:

  • The application is rendered on the server using WPF’s software rasterizer
  • As the application runs, the server keeps track of which regions of the application’s window are newly dirty and need to be updated
  • When a region needs to be updated, the server creates a compressed bitmap of just the dirty region and sends that to the client
  • Once the client has drawn that bitmap to the appropriate place on its own window, the client window is up-to-date

Given how this remoting mechanism works, performance can be maximized in several ways:

  • Dirty regions should be kept as small as possible so the least amount of data is sent over the wire
  • 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
    • For those animations that can’t be eliminated completely, lower the animation framerate using the DesiredFramerate property
  • 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 – the 3D software rasterizer is substantially slower than rendering in hardware
Да, но все еще зависит от визуализации интерфейса. Проблемы производительности просто усугубляются. Перезагрузка больших графических элементов и элементов управления также требует значительных усилий. Проверьте здесь для некоторого подобного обсуждения.stackoverflow.com/questions/198030/…
Это все еще актуально после .NET 4.5 и Windows 10? Я помню, как читал несколько лет назад, что Microsoft с тех пор отключила оптимизацию специально для RDP, поскольку она добавляет сложности, которая больше не нужна, поскольку большинство людей имеют достаточно широкополосные соединения.
Мы говорим о производительности через удаленный рабочий стол. Когда он запускается из прямой настольной коробки, он работает хорошо и хорошо. amazedsaint
0

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

Похожие вопросы