Оптимизация производительности. Дополнительные рекомендации
В этом разделе содержатся рекомендации по улучшению производительности в дополнение к описанным в разделах статьи Улучшение производительности приложений WPF.
Этот раздел состоит из следующих подразделов.
Проверка попадания курсора мыши на больших трехмерных поверхностях
Настройка службы кэширования шрифтов для сокращения времени загрузки
Сравнение прозрачности кисти с прозрачностью элементов
При использовании объекта Brush для настройки у элемента свойств Fill или Stroke оптимальным является задание значения Brush.Opacity, а не свойства Opacity этого элемента. Изменение у элемента свойства Opacity может привести к созданию средствами WPF временной поверхности.
Переход к объекту
Объект NavigationWindow является производным от Window и расширяет его благодаря поддержке навигации по содержимому, реализуемой в основном с помощью статистической обработки NavigationService и журнала. Клиентскую область NavigationWindow можно обновить, указав универсальный код ресурса (URI) или объект. В следующем примере демонстрируются оба способа.
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 необходимо учитывать влияние журналирования на производительность приложения. Дополнительные сведения см. в разделе Общие сведения о переходах.
Проверка попадания курсора мыши на больших трехмерных поверхностях
Проверка попадания курсора мыши на больших трехмерных поверхностях является операцией, очень затратной по производительности и загрузке процессора. Особенно это относится к анимированным трехмерным поверхностям. Если проверка попадания курсора на этих поверхностях не требуется, то ее следует отключить. Объекты, производные от UIElement, могут отключать проверку нажатия путем задания для свойства IsHitTestVisible значения false
.
Событие CompositionTarget.Rendering
Событие CompositionTarget.Rendering вызывает непрерывную анимацию в WPF. Если это событие используется, отключайте его при каждой возможности.
Избегайте использования ScrollBarVisibility=Auto
По возможности следует исключить использование значения ScrollBarVisibility.Auto для свойств HorizontalScrollBarVisibility
и VerticalScrollBarVisibility
. Эти свойства определяются для объектов RichTextBox, ScrollViewer и TextBox, а также в качестве присоединенных свойств для объекта ListBox. Вместо этого следует задавать для ScrollBarVisibility значения Disabled, Hidden или Visible.
Значение Auto предназначено для случаев, когда пространство ограничено, и полосы прокрутки должны отображаться только при необходимости. Например, может быть целесообразно использовать это значение ScrollBarVisibility с объектом ListBox из 30 элементов вместо объекта TextBox с сотнями строк текста.
Настройка службы кэширования шрифтов для сокращения времени загрузки
Служба кэширования шрифтов WPF используется для совместной обработки данных шрифтов приложениями WPF. Первое запускаемое приложение WPF запускает эту службу, если она еще не запущена. При использовании Windows Vista можно изменить параметр запуска службы «Windows Presentation Foundation (WPF) Font Cache 3.0.0.0» со значения «Вручную» (по умолчанию) на «Автоматически» (отложенный запуск), чтобы уменьшить время начального запуска приложений WPF.
См. также
.NET Desktop feedback