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.
Recipientes de item são adicionados diretamente ao ItemsControl. Por exemplo, se um aplicativo adiciona explicitamente ListBoxItem objetos para um ListBox, o ListBox não virtualizar o ListBoxItem objetos. Para obter mais informações sobre os recipientes de item, consulte a seção "ItemsControl"Visão geral de Controles de Modelos de Conteúdo.
configuração CanContentScroll para false.
configuração IsVirtualizing para false.
Usando o agrupamento de item.
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:
Recipientes de item são adicionados diretamente ao ItemsControl. Por exemplo, ListBoxItem os objetos são adicionados diretamente a um ListBox controle. Para obter mais informações sobre os recipientes de item, consulte a seção "ItemsControl"Visão geral de Controles de Modelos de Conteúdo.
Recipientes de item no ItemsControl são de tipos diferentes. Por exemplo, um Menu que usa Separator objetos não é possível implementar a reciclagem de item porque o Menu contém objetos de tipo Separator e MenuItem.
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 |
---|---|---|---|
Pode ser ativada |
Pode ser ativada |
Pode ser ativada |
|
Pode ser ativada |
Pode ser ativada |
Pode ser ativada |
|
Não disponível |
Não disponível |
Pode ser ativada |
|
Padrão |
Pode ser ativada |
Pode ser ativada |
|
Padrão |
Pode ser ativada |
Pode ser ativada |
|
Pode ser ativada |
Pode ser ativada |
Pode ser ativada |
|
Não disponível |
Não disponível |
Pode ser ativada |
Observaçã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
Otimizando o desempenho: Layout and Design
Otimizando o desempenho: Ligação de Dados
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. |