在我们的场景中,我们有一个用户通过远程桌面使用的 wpf 应用程序,我们发现用户体验非常缓慢。
在这种情况下改善用户体验有什么建议吗?一点可能是禁用任何动画/故事板,并避免在 UI 中使用渐变。更多的想法表示赞赏。
在我们的场景中,我们有一个用户通过远程桌面使用的 wpf 应用程序,我们发现用户体验非常缓慢。
在这种情况下改善用户体验有什么建议吗?一点可能是禁用任何动画/故事板,并避免在 UI 中使用渐变。更多的想法表示赞赏。
对于渐变,它不像多个渲染层那样成为问题,例如,如果您有一堆嵌套控件都部分不透明。查看可用的 WPF性能优化指南。那里有很多信息需要消化,但是有了那里的渲染技巧和性能工具,你肯定能够做出一些改进。
更新:
Jamie Rodriguez将在 Microsoft 发布一些关于 WPF 的内部讨论。今天有一个新帖子,其中包括有关远程处理时性能的提示和讨论。
自 WPF 3.5 SP1 以来的所有 WPF 版本都使用位图远程处理进行了远程处理(包括远程桌面和终端服务器)。
位图远程处理的工作原理如下:
- 应用程序使用 WPF 的软件光栅化器在服务器上呈现
- 当应用程序运行时,服务器会跟踪应用程序窗口的哪些区域是新脏的并且需要更新
- 当需要更新区域时,服务器会创建一个仅包含脏区域的压缩位图并将其发送给客户端
- 一旦客户端将该位图绘制到它自己窗口上的适当位置,客户端窗口就是最新的
鉴于这种远程机制的工作原理,可以通过以下几种方式最大化性能:
- 脏区应尽可能小,以便通过线路发送的数据量最少
- 环境动画应该关闭
- 例如,将窗口背景设置为动画渐变会导致整个窗口无效/每帧重绘
- 系统不会优化掉应用程序的被遮挡部分
- 例如,完全隐藏在其他一些不透明元素后面的动画仍然会导致脏区失效/位图生成发生。从您的应用程序中删除这些。
- 应尽可能不频繁地创建脏区
- 关闭尽可能多的动画
- 对于那些无法完全消除的动画,使用 DesiredFramerate 属性降低动画帧率
- 脏区位图应尽可能简单以最大限度地压缩
- 在 TS 上运行的应用程序应该更喜欢纯色而不是渐变或其他奇异的填充(不必要的图像等),尤其是对于将频繁重绘的应用程序片段
- 避免在软件中渲染时特别慢的操作
- BitmapEffects / Effects / ShaderEffects,尤其是大半径的模糊和阴影,在软件中相当慢
- 3D – 3D 软件光栅化器比硬件渲染慢得多
您可以查询 WPF 性能层 ( http://msdn.microsoft.com/en-us/library/ms742196.aspx ) 并酌情降低动画/图形技巧,以便您的应用在运行时在本地看起来仍然很棒快速超过 RDP。