优化性能:其他建议

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

本主题包含以下各节:

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

  • 导航到对象

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

  • CompositionTarget.Rendering 事件

  • 避免使用 ScrollBarVisibility=Auto

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

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

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

导航到对象

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

        Private Sub buttonGoToUri(ByVal sender As Object, ByVal args As RoutedEventArgs)
            navWindow.Source = New Uri("NewPage.xaml", UriKind.RelativeOrAbsolute)
        End Sub

        Private Sub buttonGoNewObject(ByVal sender As Object, ByVal args As RoutedEventArgs)
            Dim nextPage As New NewPage()
            nextPage.InitializeComponent()
            navWindow.Content = nextPage
        End Sub
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 对象都有一个日记,其中记录了用户在该窗口中的导航历史记录。 日记的作用之一便是用户可通过它回溯他们执行的步骤。

当您使用uniform resource identifier (URI) 导航时,日记只存储uniform resource identifier (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 应用程序的初始启动时间。

请参见

概念

规划应用程序性能

优化性能:利用硬件

优化性能:布局和设计

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

优化性能:对象行为

优化性能:应用程序资源

优化性能:文本

优化性能:数据绑定

动画提示和技巧