优化性能:其他建议

本主题除了“ 优化 WPF 应用程序性能 ”部分中的主题介绍的性能建议外,还提供性能建议。

本主题包含以下部分:

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

使用 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;
}
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

每个 NavigationWindow 对象都有一个记录该窗口中用户的导航历史记录的日记。 日志的目的之一是让用户追溯他们的步骤。

使用统一资源标识符(URI)导航时,日志仅存储统一资源标识符(URI)引用。 这意味着,每次重新访问页面时,都会动态重新构造页面,这可能很耗时,具体取决于页面的复杂性。 在这种情况下,日志存储成本较低,但重新构造页面的时间可能很高。

使用对象导航时,日志将存储该对象的整个可视化树。 这意味着每次重新访问页面时,它都会立即呈现,而无需重新构造。 在这种情况下,日记存储成本很高,但重新构造页面的时间较低。

使用 NavigationWindow 对象时,需要记住日记支持对应用程序性能的影响。 有关详细信息,请参阅 导航概述

大型 3D 表面上的碰撞检测

在大型 3D 图面上进行命中测试是一项对 CPU 资源消耗非常高的操作。 当 3D 图面进行动画处理时,这尤其如此。 如果不需要在这些表面上进行命中测试,请禁用命中测试。 派生自 UIElement 的对象可以通过将 IsHitTestVisible 属性设置为 false禁用命中测试。

CompositionTarget.Rendering 事件

CompositionTarget.Rendering 事件导致 WPF 持续进行动画处理。 如果使用此事件,请在每个机会中将其分离。

避免使用“ScrollBarVisibility=Auto”

尽可能避免对HorizontalScrollBarVisibilityVerticalScrollBarVisibility属性使用ScrollBarVisibility.Auto值。 这些属性针对 RichTextBox对象 ScrollViewerTextBox 对象定义,并作为对象的附加属性 ListBox 定义。 相反,将ScrollBarVisibility设置为DisabledHiddenVisible

该值 Auto 适用于空间有限且仅在必要时显示滚动条的情况。 例如,将此值 ScrollBarVisibilityListBox 30 个项目(而不是 TextBox 包含数百行文本)一起使用可能很有用。

配置字体缓存服务以减少启动时间

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

另请参阅