Partilhar via


Otimizando o desempenho: Controles

Windows Presentation Foundation (WPF) inclui vários componentes de interface de usuário (UI) comuns 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 bidirecional Virtualization
  • Otimização de modelos
  • Foi adiado rolagem
  • Controla que recursos de desempenho de implementação
  • Tópicos relacionados

Exibindo grandes conjuntos de dados

Controles do WPF, sistema autônomo a 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 ocorre porque o sistema de layout padrão cria um contêiner de layout para cada item associado com o controle de lista e calcula a posição e dimensionar de layout. Normalmente, não é necessário que exibir todos os itens ao mesmo time; em vez disso, exibir um subconjunto e o usuário rola a lista. Nesse caso, faz sentido usar UI virtualização, que significa que a geração de contêiner do item e computação de layout associado de um item é adiada até que o item esteja visível.

Virtualização de interface do usuário é um aspecto importante de controles de lista. Virtualização de interface do usuário não deve ser confundida com a virtualização de dados. UI virtualização de armazenamentos somente itens visíveis em memória, mas em um cenário de vinculação de dados armazena toda a estrutura de dados na memória. Por outro lado, a virtualização de dados armazena apenas 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 é habilitada para o ListView e ListBox Controla quando seus itens de lista são vinculados a dados. TreeView a virtualização pode ser ativada pelo configuração o VirtualizingStackPanel.IsVirtualizing propriedade anexada a true. Se você desejar habilitar a virtualização de UI para controles personalizados que derivam de ItemsControl ou o item existente controles que usam o StackPanel classe, sistema autônomo ComboBox, você pode definir o ItemsPanel para VirtualizingStackPanel e conjunto IsVirtualizing para true. Infelizmente, você pode desabilitar a virtualização de interface do usuário para esses controles sem perceber. Veja a seguir uma lista de condições que desabilitar a virtualização de interface do usuário.

Atualmente, não há controles WPF oferecem suporte interno para virtualização de dados.

Reciclagem de contêiner

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

Reciclagem de contêiner não é usado se qualquer uma das seguintes situações for verdadeira:

Uma consideração importante quando reciclar recipientes de item é se você tem informações adicionais de estado associadas a um contêiner de item que pertence com o 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 é limite ao contêiner do item e não no próprio item. Quando o contêiner é reutilizado para um novo item, o valor corrente de IsExpanded é usado para o novo item. Além disso, o item antigo perde o correto IsExpanded valor.

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

Suporte bidirecional Virtualization

VirtualizingStackPanel oferece suporte interno para virtualização de interface do usuário em uma direção horizontal ou verticalmente. Se você deseja usar virtualização bidirecional para seus controles, você deve implementar um painel personalizado que estende o VirtualizingStackPanel classe. The VirtualizingStackPanel classe expõe métodos virtual sistema autônomo OnViewportSizeChanged, LineUp, PageUp, e MouseWheelUpMétodos virtual .esses permitem que você detectar uma alterar na parte visível de uma lista e manipulá-lo adequadamente.

Otimização de modelos

A árvore visual contém todos os elementos visuais em um aplicativo. Juntamente com os objetos criados diretamente, ele também contém objetos devido à expansão do modelo. Por exemplo, quando você criar um Button, você também obtém ClassicBorderDecorator e ContentPresenter objetos da árvore visual. Se você ainda não otimizados seus modelos de controle, você pode criar muitos objetos extra desnecessários na árvore visual. Você pode usar XAMLPad para manter o controle dos elementos na sua árvore visual e remover itens desnecessários nos seus modelos sempre que possível. Para mais informações sobre a árvore visual, consulte Visão Geral sobre Renderização de Gráficos do Windows Presentation Foundation.

Foi adiado rolagem

Por padrão, quando o usuário arrasta o controle deslizante em uma barra de rolagem, o modo de exibição de conteúdo continuamente atualizado. Se estiver lenta no seu controle de rolagem, considere usando adiada rolagem. Na rolagem retardada, o conteúdo é atualizado somente quando o usuário libera o controle deslizante.

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

Controla que recursos de desempenho de implementação

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

Controle

Virtualização

Reciclagem de contêiner

Foi adiado de letreiro

ComboBox

Pode ser ativada

Pode ser ativada

Pode ser ativada

ContextMenu

Pode ser ativada

Pode ser ativada

Pode ser ativada

DocumentViewer

Não disponível

Não disponível

Pode ser ativada

ListBox

Padrão

Pode ser ativada

Pode ser ativada

ListView

Padrão

Pode ser ativada

Pode ser ativada

TreeView

Pode ser ativada

Pode ser ativada

Pode ser ativada

ToolBar

Não disponível

Não disponível

Pode ser ativada

ObservaçãoObservação:

Para obter um exemplo de como habilitar virtua lization e reciclagem no contêiner um TreeView, consulte Como: Melhore o desempenho de um TreeView.

Consulte também

Conceitos

O sistema de layout

Otimizando o desempenho: Layout and Design

Otimizando o desempenho: Ligação de Dados

Visão geral sobre controles

Styling and Templating

Date

History

Motivo

Julho de 2008

Tópico adicional para o .NET estrutura 3.5 serviço empacotar 1.

Alteração de recurso do SP1.