Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Optimizar el rendimiento: Controles

Windows Presentation Foundation (WPF) incluye muchos de los componentes comunes de interfaz de usuario que se utilizan en la mayoría de las aplicaciones Windows. Este tema contiene técnicas para mejorar el rendimiento de la interfaz de usuario.

Este tema contiene las secciones siguientes.

Los controles de WPF como ListView y ComboBox se utilizan para mostrar listas de elementos en una aplicación. Si la lista que se va a mostrar es grande, puede afectar al rendimiento de la aplicación. Esto es porque el sistema de diseño estándar crea un contenedor de diseño para cada elemento asociado al control de lista, y calcula su tamaño y posición de diseño. Normalmente, no es necesario mostrar al mismo tiempo todos los elementos; en lugar de ello se muestra un subconjunto y el usuario se va desplazando por la lista. En este caso, es razonable utilizar la virtualización de la interfaz de usuario, que consiste en diferir la generación de contenedor de elemento y los cálculos de diseño asociados hasta que el elemento esté visible.

La virtualización de la interfaz de usuario es un aspecto importante de los controles de lista. Es importante no confundir la virtualización de la interfaz de usuario con la virtualización de datos. La virtualización de la interfaz de usuario almacena en la memoria únicamente los elementos visibles; pero en un escenario de enlace de datos almacena en la memoria la estructura de datos completa. En cambio, la virtualización de datos almacena en la memoria solamente los elementos de datos que están visibles en la pantalla.

De forma predeterminada, la virtualización de la interfaz de usuario está habilitada para los controles ListView y ListBox cuando sus elementos de lista están enlazados a datos. La virtualización de TreeView puede habilitarse estableciendo la propiedad adjunta VirtualizingStackPanel.IsVirtualizing en true. Si desea habilitar la virtualización de la interfaz de usuario para los controles personalizados derivados de ItemsControl o de controles de elementos existentes que utilizan la clase StackPanel, como ComboBox, puede establecer ItemsPanel en VirtualizingStackPanel y establecer IsVirtualizing en true. Desgraciadamente, puede suceder que deshabilite la virtualización de la interfaz de usuario para estos controles sin darse cuenta. A continuación se facilita una lista de condiciones que deshabilitan la virtualización de la interfaz de usuario.

Una consideración importante cuando se virtualiza los contenedores de elementos es si tiene información de estado adicional asociado con un contenedor de elemento que está asociada al. En este caso, deberá guardar el estado adicional. Por ejemplo, supongamos que hay un elemento incluido en un control Expander y que el estado IsExpanded está enlazado al contenedor del elemento, no al propio elemento. Cuando el contenedor se reutiliza para un nuevo elemento, el valor actual de IsExpanded se utiliza para el nuevo elemento. Además, el elemento antiguo pierde el valor de IsExpanded correcto.

Actualmente, ningún control de WPF proporciona compatibilidad integrada con la virtualización de datos.

Una optimización a la virtualización de la interfaz de usuario que se ha agregado a .NET Framework 3.5 SP1 para los controles que heredan de ItemsControl es el reciclaje de contenedores, que también puede mejorar el rendimiento del desplazamiento. Cuando se rellena un objeto ItemsControl que utiliza la virtualización de la interfaz de usuario, crea un contenedor de elemento para cada elemento que queda visible al desplazarse, y destruye el contenedor de elemento correspondiente a cada elemento que deja de estar visible al desplazarse. El reciclaje de contenedores permite que el control reutilice los contenedores de elemento existentes para distintos elementos de datos, de tal forma que evita tener que crear y destruir continuamente los contenedores de elementos a medida que usuario se desplaza por ItemsControl. Puede habilitar el reciclaje estableciendo la propiedad adjunta VirtualizationMode a Recycling.

Cualquier objeto ItemsControl que admita la virtualización puede utilizar el reciclaje de contenedores. Para obtener un ejemplo de cómo habilitar el reciclaje de contenedores en un control ListBox, vea Cómo: Mejorar el rendimiento del desplazamiento de un control ListBox.

VirtualizingStackPanel proporciona compatibilidad integrada con la virtualización de la interfaz de usuario en una dirección, horizontal o vertical. Si desea utilizar la virtualización bidireccional para sus controles, debe implementar un panel personalizado que extienda la clase VirtualizingStackPanel. La clase VirtualizingStackPanel expone métodos virtuales como OnViewportSizeChanged, LineUp, PageUp y MouseWheelUp. Estos métodos virtuales permiten detectar un cambio en la parte visible de una lista y administrarlo en consecuencia.

El árbol visual contiene todos los elementos visuales de una aplicación. Además de los objetos que se han creado directamente, también contiene los que se deben a la expansión de la plantilla. Por ejemplo, al crear un objeto Button, también se obtienen los objetos ContentPresenter y ClassicBorderDecorator en el árbol visual. Si no ha optimizado las plantillas de los controles, puede suceder que cree gran cantidad de objetos innecesarios adicionales en el árbol visual. Para obtener más información sobre el árbol visual, vea Información general sobre la representación de gráficos en WPF.

De forma predeterminada, cuando el usuario arrastra el cuadro de una barra de desplazamiento, la vista de contenido se actualiza continuamente. Si el desplazamiento dentro del control es lento, puede ser interesante utilizar el desplazamiento diferido. En el desplazamiento diferido, el contenido se actualiza únicamente cuando el usuario suelta el cuadro de desplazamiento.

Para implementar el desplazamiento diferido, establezca la propiedad IsDeferredScrollingEnabled en true. IsDeferredScrollingEnabled es una propiedad adjunta y se puede establecer para ScrollViewer y para cualquier control que contenga ScrollViewer en su plantilla de control.

En la tabla siguiente se muestra una lista de controles que se suelen usar para mostrar datos y su compatibilidad con las características de rendimiento. Vea las secciones anteriores para obtener información sobre cómo habilitar estas características.

Control

Virtualización

Reciclaje de contenedores

Desplazamiento diferido

ComboBox

Se puede habilitar

Se puede habilitar

Se puede habilitar

ContextMenu

Se puede habilitar

Se puede habilitar

Se puede habilitar

DocumentViewer

No está disponible

No está disponible

Se puede habilitar

ListBox

Default

Se puede habilitar

Se puede habilitar

ListView

Default

Se puede habilitar

Se puede habilitar

TreeView

Se puede habilitar

Se puede habilitar

Se puede habilitar

ToolBar

No está disponible

No está disponible

Se puede habilitar

Nota Nota

Para obtener un ejemplo de cómo habilitar virtualización y reciclaje del contenedores en un objeto TreeView, vea Cómo: Mejorar el rendimiento de un control TreeView.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft