通过远程桌面提高WPF应用程序的速度?

在我们的场景中,我们有一个用户通过远程桌面使用的wpf应用程序,我们发现用户体验非常慢。

有关改善此scheme中的用户体验的任何build议? 有一点可能是禁用任何animation/故事板,并避免在UI中使用渐变。 更多的想法,赞赏。

对于渐变来说,它不像多个渲染图层那样重要,比如如果你有一堆嵌套的控件都是部分不透明的。 看一看WPF 性能优化指南。 这里有大量的信息要消化,但是在那里提供渲染技巧和性能工具,你一定能够做出一些改进。

更新:
杰米·罗德里格斯(Jamie Rodriguez)将在微软公布一些关于WPF的内部讨论。 今天有一个新帖子,其中包括关于远程处理时的性能提示和讨论。

自WPF 3.5 SP1以来,所有版本的WPF都使用Bitmap Remoting进行了远程(包括远程桌面和终端服务器)。

位图远程工作如下:

  • 该应用程序使用WPF的软件光栅化程序呈现在服务器上
  • 当应用程序运行时,服务器会跟踪应用程序窗口的哪些区域新变脏,需要更新
  • 当某个区域需要更新时,服务器会创建一个只有脏区域的压缩位图,并将其发送给客户端
  • 一旦客户端已经将该位图绘制到自己的窗口的适当位置,客户端窗口是最新的

鉴于这种远程机制如何运作,绩效可以通过几种方式最大化:

  • 脏区应该尽可能小,以便通过电线发送最少量的数据
  • 环境动画应该关闭
    • 例如,将窗口背景设置为动画渐变会导致整个窗口被无效/重绘每一帧
  • 系统不会优化应用程序的遮挡部分
    • 例如,完全隐藏在其他不透明元素背后的动画仍然会导致脏区失效/位图生成。 从应用程序中删除这些。
  • 应该尽可能少地创建脏区域
    • 关闭尽可能多的动画
    • 对于那些无法完全消除的动画,请使用DesiredFramerate属性降低动画帧率
  • 脏区位图应该尽可能简单,以最大化压缩
    • 运行在TS上的应用程序应该倾向于纯色渐变或其他奇特的填充(不必要的图像等),特别是对于经常重绘的应用程序片段
  • 避免在软件中渲染时特别慢的操作
    • BitmapEffects / Effects / ShaderEffects,特别是大半径的模糊和阴影,在软件中相当慢
    • 3D – 3D软件光栅化程序比硬件渲染要慢很多

您可以查询WPF性能层( http://msdn.microsoft.com/en-us/library/ms742196.aspx ),并适当地减少动画/图形技巧,以便您的应用在本地看起来仍然很棒,而运行快速通过RDP。