优化性能:其他建议

更新:2007 年 11 月

本主题提供优化 WPF 应用程序性能这一节中各主题内容之外的性能改进建议。

本主题包括下列各节。

  • 画笔的不透明度与元素的不透明度
  • 导航到对象
  • 对大型三维图面进行命中测试
  • CompositionTarget.Rendering 事件
  • 避免使用 ScrollBarVisibility=Auto
  • 配置字体缓存服务以缩短启动时间
  • 终端服务呈现增强功能
  • 相关主题

画笔的不透明度与元素的不透明度

在使用 Brush 设置元素的 FillStroke 时,设置 Brush.Opacity 值比设置元素的 Opacity 属性效果要好。修改元素的 Opacity 属性会导致 WPF 创建临时图面。

导航到对象

NavigationWindow 对象派生自 Window 并用内容导航支持对其进行了扩展,这主要是通过聚合 NavigationService 与日记完成的。通过指定统一资源标识符 (URI) 或对象,您可以更新 NavigationWindow 的工作区。下面的示例演示了这两种方法:

private void buttonGoToUri(object sender, RoutedEventArgs args)
{
    navWindow.Source = new Uri("NewPage.xaml", UriKind.RelativeOrAbsolute);
}

private void buttonGoNewObject(object sender, RoutedEventArgs args)
{
    NewPage nextPage = new NewPage();
    nextPage.InitializeComponent();
    navWindow.Content = nextPage;
}

每个 NavigationWindow 对象都有一个日记,其中记录了用户在该窗口中的导航历史记录。日记的作用之一便是用户可通过它回溯他们执行的步骤。

当您使用统一资源标识符 (URI) 导航时,日记只存储统一资源标识符 (URI) 引用。这意味着,每当您重新访问该页时都会动态地重新构造该页。根据页面的复杂程度,此过程可能会非常耗时。在这种情况下,虽然占用的日记存储较少,但用于重建该页的时间可能会较长。

当您使用对象进行导航时,日记会存储对象的整个可视化树。这意味着,每当您重新访问该页时,无需重新构造即可立即呈现该页。在这种情况下,虽然占用的日记存储较多,但重建页面的时间却较短。

使用 NavigationWindow 对象时,您需要记住日记支持是如何对应用程序的性能造成影响的。有关更多信息,请参见导航概述

对大型三维图面进行命中测试

就 CPU 占用率而言,对大型三维图面进行命中测试是一项非常占用资源的操作。这在三维图面具有动画效果时更是如此。如果不需要对这些图面进行命中测试,请禁用命中测试。通过将 IsHitTestVisible 属性设置为 false,派生自 UIElement 的对象可以禁用命中测试。

CompositionTarget.Rendering 事件

CompositionTarget.Rendering 事件可使 WPF 连续显示动画效果。使用此事件时,应尽量将其分离。

避免使用 ScrollBarVisibility=Auto

应尽量避免对 HorizontalScrollBarVisibility 和 VerticalScrollBarVisibility 属性使用 ScrollBarVisibility.Auto 值。这些属性是为 RichTextBoxScrollViewerTextBox 对象定义的,并且定义为 ListBox 对象的附加属性。应改为将 ScrollBarVisibility 设置为 DisabledHiddenVisible

Auto 值适用于空间有限且只应在必要时才显示滚动条的情况。例如,与具有数百行文本的 TextBox 相比,在具有 30 个项目的 ListBox 中使用此 ScrollBarVisibility 值可能会更为有用。

配置字体缓存服务以缩短启动时间

WPF 字体缓存服务负责在 WPF 应用程序之间共享字体数据。如果该服务尚未运行,则运行第一个 WPF 应用程序时将启动此服务。如果您使用的是 Windows Vista,则可以将“Windows Presentation Foundation (WPF) 字体缓存 3.0.0.0”服务从“手动”(默认值)设置为“自动(延迟的启动)”,以缩短 WPF 应用程序的初始启动时间。

终端服务呈现增强功能

利用远程桌面连接,客户端可以一边在服务器上远程运行应用程序,一边自己显示这些应用程序。服务器可以是 Windows Terminal Server,也可以是 Windows 的某个版本,前者能够同时为多个远程桌面连接提供服务,而后者只能为单个远程桌面连接提供服务。当用户通过远程桌面连接运行应用程序时,该应用程序将在服务器上运行;客户端上的键盘和鼠标活动将被传输到服务器上,同时服务器上生成的结果应用程序 UI 将以位图的形式传输给客户端。

但是,与在客户端上本地呈现 UI 相比,通过用网络向客户端发送位图来模拟用户界面的性能可能会有差异。幸运的是,通过 远程桌面连接 (RDC) 会话运行的 WPF 应用程序可以利用 Windows Vista 中的特殊呈现支持来在客户端上进行呈现。

为了利用此支持,必须满足下列条件:

  • 服务器上必须安装 Windows Vista Ultimate 或 Windows Vista Enterprise。

  • 服务器必须具有足够的内存来满足桌面窗口管理器 (DWM) 的内存要求(不需要满足其他 DWM 要求,例如对视频卡的要求)。

  • 客户端与服务器安装的 Vista 的版本必须相同。

  • 客户端必须能够运行 Windows Vista 桌面窗口管理器 (DWM)。当桌面窗口管理器会话管理器服务运行时,将启用 DWM。

  • 客户端不得正在运行能够禁用 DWM 的应用程序,例如会议室或远程协助。

  • 客户端不能多跳至具有所需 WPF 应用程序的服务器。多跳是指从一个会话中创建另一个会话。

  • 客户端的远程桌面连接配置必须包括下列设置:

    • 必须在**“远程桌面连接”|“选项”|“体验”中选择“桌面组合”**。

    • 必须在**“远程桌面连接”|“选项”|“体验”中选择“主题”**。

    • 必须在**“远程桌面连接”|“选项”|“显示”|“颜色”中选择“32 位彩色”**。

说明:

有关 DWM 的要求,请参见 Windows Vista Rules for Enabling Windows Aero(有关启用 Windows Aero 的 Windows Vista 规则)。

请参见

概念

规划应用程序性能

优化性能:利用硬件

优化性能:布局和设计

优化性能:二维图形和图像处理

优化性能:对象行为

优化性能:应用程序资源

优化性能:文本

优化性能:数据绑定

WPF 性能工具和资源

动画提示和技巧