Otimizando desempenho: outras recomendações
Este tópico apresenta recomendações de desempenho além daquelas abordadas pelos tópicos na seção Otimizando o desempenho do aplicativo WPF.
Este tópico contém as seguintes seções:
Opacidade em pincéis versus opacidade em elementos
Quando você usa um para definir o ou Stroke de um Brush elemento, é melhor definir o FillBrush.Opacity valor em vez de definir a propriedade do Opacity elemento. Modificar a propriedade de Opacity um elemento pode fazer com que o WPF crie uma superfície temporária.
Navegação para objeto
O NavigationWindow objeto deriva e o estende com suporte à navegação de conteúdo, principalmente por meio da Window agregação NavigationService e do diário. Você pode atualizar a área do cliente especificando um URI (identificador uniforme de NavigationWindow recurso) ou um objeto. O exemplo a seguir mostra os dois métodos:
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
Cada NavigationWindow objeto tem um diário que registra o histórico de navegação do usuário nessa janela. Uma das finalidades do diário é permitir aos usuários rastrear seus passos.
Quando você navega usando um URI (identificador uniforme de recurso), o diário armazena apenas a referência de URI (identificador uniforme de recurso). Isso significa que sempre que você revisita a página, ela é dinamicamente reconstruída, o que pode ser demorado, dependendo da complexidade da página. Nesse caso, o custo de armazenamento do diário é baixo, mas o tempo para reconstituir a página é potencialmente alto.
Quando você navega usando um objeto, o diário armazena toda a árvore visual do objeto. Isso significa que sempre que você revisita a página, ela é renderizada imediatamente sem precisar ser reconstruída. Nesse caso, o custo de armazenamento do diário é alto, mas o tempo para reconstituir a página é baixo.
Ao usar o objeto, você precisará ter em mente como o NavigationWindow suporte ao registro no diário afeta o desempenho do aplicativo. Para obter mais informações, consulte Visão geral de navegação.
Testes de clique em grandes superfícies 3D
Teste de clique em grandes superfícies 3D é uma operação com uso intenso de desempenho em termos de consumo de CPU. Isso é especialmente verdadeiro quando a superfície 3D é animada. Se você não precisar de teste de clique nessas superfícies, desabilite-o. Os objetos derivados de podem desabilitar o teste de UIElement ocorrências definindo a IsHitTestVisible propriedade como false
.
Evento CompositionTarget.Rendering
O CompositionTarget.Rendering evento faz com que o WPF seja animado continuamente. Se você usar esse evento, desanexe-o em cada oportunidade.
Evite usar ScrollBarVisibility=Auto
Sempre que possível, evite usar o ScrollBarVisibility.Auto valor para as HorizontalScrollBarVisibility
propriedades e VerticalScrollBarVisibility
. Essas propriedades são definidas para , ScrollViewere objetos e TextBox como uma propriedade anexada para RichTextBoxo ListBox objeto. Em vez disso, defina ScrollBarVisibility como Disabled, Hiddenou Visible.
O Auto valor destina-se a casos em que o espaço é limitado e as barras de rolagem só devem ser exibidas quando necessário. Por exemplo, pode ser útil usar esse ScrollBarVisibility valor com um de 30 itens em vez de um ListBoxTextBox com centenas de linhas de texto.
Configurar o serviço de cache de fonte para reduzir o tempo de inicialização
O serviço WPF Font Cache compartilha dados de fonte entre aplicativos WPF. O primeiro aplicativo WPF executado inicia esse serviço se o serviço ainda não estiver em execução. Se você estiver usando o Windows Vista, você pode definir o serviço "Windows Presentation Foundation (WPF) Font Cache 3.0.0.0" de "Manual" (o padrão) para "Automático (início atrasado)" para reduzir o tempo de inicialização inicial de aplicativos WPF.
Confira também
.NET Desktop feedback