Оптимизация производительности. Дополнительные рекомендации
В этом разделе содержатся рекомендации по улучшению производительности в дополнение к описанным в подразделе раздела Улучшение производительности приложений WPF.
В этом разделе содержатся следующие подразделы.
Сравнение прозрачности кисти с прозрачностью элементов
Переход к объекту
Проверка попадания курсора мыши на больших трехмерных поверхностях
Событие CompositionTarget.Rendering
Избегайте использования ScrollBarVisibility=Auto
Настройка службы кэширования шрифтов для сокращения времени загрузки
Сравнение прозрачности кисти с прозрачностью элементов
При использовании Brush для установки свойства Fill или Stroke элемента лучше установить значение Brush.Opacity вместо свойства элемента Opacity. Изменение свойства элемента Opacity может вызвать среду WPF для создания временной поверхности.
Переход к объекту
Объект NavigationWindow является производным от Window и расширяет его возможностью навигации по содержимому, главным образом, статистической обработкой NavigationService и журналированием. Можно обновить клиентскую область NavigationWindow, указав uniform resource identifier (URI) или объект. В следующем примере демонстрируются оба способа.
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 необходимо учитывать влияние журналирования на производительность приложения. Дополнительные сведения см. в разделе Общие сведения о переходах.
Проверка попадания курсора мыши на больших трехмерных поверхностях
Проверка попадания курсора мыши на больших трехмерных поверхностях является операцией, очень затратной по производительности и загрузке процессора. Особенно это относится к анимированным трехмерным поверхностям. Если проверка попадания курсора на этих поверхностях не требуется, то ее следует отключить. Объекты, производные от 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.
См. также
Основные понятия
Планирование производительности приложения
Оптимизация производительности. Использование преимуществ аппаратного ускорения
Оптимизация производительности: разметка и разработка
Оптимизация производительности: двумерная графика и обработка изображений
Оптимизация производительности: поведение объекта
Оптимизация производительности: ресурсы приложения
Оптимизация производительности: отображение текста