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

时间:2009-06-17 07:04:38

标签: .net wpf windows remote-desktop

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

有关改善此方案中用户体验的任何建议吗?一点可能是禁用任何动画/故事板,并避免在UI中使用渐变。感谢更多的想法。

2 个答案:

答案 0 :(得分:9)

对于渐变,它不像多个渲染层那么多,例如,如果你有一堆嵌套控件都是部分不透明的。查看可用的WPF Performance Optimization指南。那里有很多信息需要消化,但有关于渲染的提示以及performance tools你肯定能够做出一些改进。

<强>更新
Jamie Rodriguez将在微软发布关于WPF的一些内部讨论。今天有一篇新帖子,其中包括有关performance when remoting的提示和讨论。

  

WPF 3.5 SP1以后的所有版本的WPF都使用Bitmap Remot远程(远程桌面和终端服务器)。

     

位图远程处理的工作原理如下:

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

鉴于这种远程处理机制如何工作,可以通过多种方式最大化性能:

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

答案 1 :(得分:0)

您可以查询WPF性能层(http://msdn.microsoft.com/en-us/library/ms742196.aspx)并根据需要调整动画/图形技巧,以便您的应用程序在本地运行时仍能在RDP上快速运行。