Compartilhar via


Otimização de desempenho: Controles

Windows Presentation Foundation (WPF)inclui vários componentes de interface do usuário (UI) comuns que são usados na maioria dos aplicativos do Windows. Este tópico contém técnicas para melhorar o desempenho de sua interface do usuário.

Este tópico contém as seguintes seções.

  • Exibindo grandes conjuntos de dados
  • Reciclagem de contêiner
  • Suporte virtualização de bidirecional
  • Modelos de otimização
  • Foi adiado de rolagem
  • Controla que recursos de desempenho de implementar
  • Tópicos relacionados

Exibindo grandes conjuntos de dados

Controles do WPF como o ListView e ComboBox são usados para exibir listas de itens em um aplicativo. Se a lista para exibir for grande, o desempenho do aplicativo pode ser afetado. Isso é porque o sistema de layout padrão cria um contêiner de layout para cada item associado ao controle de lista e calcula o tamanho do layout e a posição. Normalmente, você não tem que exibir todos os itens ao mesmo tempo; em vez disso você exibe um subconjunto e o usuário rola a lista. Nesse caso, faz sentido usar a interface do usuário virtualização, que significa que a geração de contêiner do item e associados a computação de layout para um item é adiado até que o item está visível.

A virtualização de interface do usuário é um aspecto importante dos controles de lista. Virtualização de interface do usuário não deve ser confundida com a virtualização de dados. UI virtualização armazena somente itens visíveis na memória, mas em um cenário de vinculação de dados armazena a estrutura de dados inteira na memória. Em contraste, a virtualização de dados armazena os itens de dados que são visíveis na tela na memória.

Por padrão, a virtualização de interface do usuário está habilitada para o ListView e ListBox controla quando seus itens de lista são vinculados a dados. TreeViewa virtualização pode ser ativada definindo a VirtualizingStackPanel.IsVirtualizing anexado propriedade para true. Se você deseja habilitar a virtualização de interface do usuário para controles personalizados que derivam de ItemsControl ou controles de item existente que usam o StackPanel de classe, como ComboBox, você pode definir a ItemsPanel para VirtualizingStackPanel e defina IsVirtualizing para true. Infelizmente, você pode desativar a virtualização de interface do usuário para esses controles sem perceber. Veja a seguir uma lista de condições que desativar a virtualização de interface do usuário.

Atualmente, os controles do WPF oferecem suporte interno para virtualização de dados.

Reciclagem de contêiner

Uma otimização para a virtualização de interface do usuário adicionada a.NET Framework 3.5 SP1 para controles que herdam de ItemsControl é reciclagem de contêiner, que também pode melhorar o desempenho da rolagem. Quando um ItemsControl que usa a virtualização de interface do usuário estiver preenchida, ele cria um contêiner de item para cada item que rola no modo de exibição e destrói o contêiner de item para cada item que rola de exibição. Reciclagem de contêiner permite que o controle reutilizar os contêineres de item existentes para os itens de dados diferentes, para que os recipientes de item são criados e destruídos como o usuário rolar não constantemente a ItemsControl. Você pode optar por ativar o item de reciclagem, definindo a VirtualizationMode para Recycling.

Reciclagem de contêiner não é usado se qualquer um dos casos a seguir forem verdadeiras:

Uma consideração importante quando você recicla contêineres de item é se você tem informações de estado adicionais associadas a um contêiner de item que pertence ao item. Nesse caso, você deve salvar o estado adicional. Por exemplo, você pode ter um item contido em um Expander controle e o IsExpanded estado é vinculado ao contêiner do item e não no próprio item. Quando o contêiner é reutilizado para um novo item, o valor atual de IsExpanded é usado para o novo item. Além disso, o item antigo perde o correto IsExpanded valor.

Qualquer ItemsControl que ofereça suporte a virtualização pode usar a reciclagem de contêiner. Para obter um exemplo de como habilitar a reciclagem de contêiner em um ListBox, consulte Como: Melhorar o desempenho de rolagem de uma caixa de listagem..

Suporte virtualização de bidirecional

VirtualizingStackPaneloferece suporte interno para virtualização de interface do usuário em uma direção, horizontal ou verticalmente. Se você quiser usar virtualização de bidirecional para seus controles, você deve implementar um painel personalizado que estende o VirtualizingStackPanel classe. O VirtualizingStackPanel classe expõe métodos virtuais, como OnViewportSizeChanged, LineUp, PageUp, e MouseWheelUp.Esses métodos virtuais permitem detectar uma alteração na parte visível de uma lista e manipulá-lo adequadamente.

Modelos de otimização

A árvore visual contém todos os elementos visuais em um aplicativo. Além os objetos criados diretamente, ele também contém objetos devido à expansão do modelo. Por exemplo, quando você cria um Button, mas também ClassicBorderDecorator e ContentPresenter objetos na árvore visual. Se você ainda não otimizados seus modelos de controle, você pode criar muitos objetos desnecessários extra na árvore visual. Para obter mais informações sobre a árvore visual, consulte WPF Graphics Rendering Overview.

Foi adiado de rolagem

Por padrão, quando o usuário arrasta o controle deslizante na barra de rolagem, o modo de exibição de conteúdo atualiza continuamente. Se a rolagem é lento no seu controle, considere a possibilidade de uso adiado de rolagem. Na rolagem retardada, o conteúdo é atualizado somente quando o usuário libera o thumb.

Para implementar a rolagem adiada, defina a IsDeferredScrollingEnabled propriedade para true. IsDeferredScrollingEnabledé uma propriedade anexada e pode ser definido em ScrollViewer e qualquer controle que possui um ScrollViewer no seu modelo de controle.

Controla que recursos de desempenho de implementar

A tabela a seguir lista os controles comuns para a exibição de dados e o suporte dos recursos de desempenho. Consulte as seções anteriores para obter informações sobre como ativar esses recursos.

Control

Virtualização

Reciclagem de contêiner

Foi adiado de rolagem

ComboBox

Pode ser ativado.

Pode ser ativado.

Pode ser ativado.

ContextMenu

Pode ser ativado.

Pode ser ativado.

Pode ser ativado.

DocumentViewer

Not available

Not available

Pode ser ativado.

ListBox

Default

Pode ser ativado.

Pode ser ativado.

ListView

Default

Pode ser ativado.

Pode ser ativado.

TreeView

Pode ser ativado.

Pode ser ativado.

Pode ser ativado.

ToolBar

Not available

Not available

Pode ser ativado.

Observação

Para obter um exemplo de como habilitar a virtualização e o recipiente de reciclagem em um TreeView, consulte Como: Melhorar o desempenho de um TreeView..

Consulte também

Tarefas

Demonstra Passo a passo: Cache de dados de aplicativo em um aplicativo WPF

Conceitos

Sistema de layout

Otimização de desempenho: Layout and Design

Otimização de desempenho: Ligação de Dados

Controles

Styling and Templating