wpf performance virtualization stackpanel

WPF VirtualizingStackPanel para un mayor rendimiento



performance virtualization (2)

Me gustaría una descripción simple de cómo implementar un ItemsControl virtual de virtualización para un ItemsControl que está enlazado a un ObservableCollection en mi MVVM.

Tengo una instancia de ItemsControl para cada pestaña en un control de pestañas, y el cambio de pestañas se vuelve MUY lento cuando ItemsControl crece.

¿Qué puedo hacer para acelerar la aplicación?

Abrí un generador de perfiles de WPF y vi que cada elemento (que es un control de usuario personalizado) que se muestra en mis ItemsControl de cada pestaña tenía su propio ContentPresenter . Así que esencialmente tenía 100 presentadores de contenido todos corriendo por 100 artículos en mi ObservableCollection en MVVM. ¿Esto es correcto? ¿Cómo puedo optimizar?


Hay dos técnicas que pueden ser de gran ayuda. Ambos son descritos muy bien por Bea Stolnitz en su blog .

El primero es la virtualización de la interfaz de usuario y el segundo es la virtualización de datos

En la virtualización de la interfaz de usuario utiliza cosas como VirtualizingStackPanel para hacer que la interfaz de usuario dibuje menos cosas.

La virtualización de datos asegura que no traigas un millón de objetos a la memoria cuando solo mostrarás 100.

Así que la virtualización de UI minimiza la cantidad de elementos dibujados y la virtualización de datos minimiza la cantidad de elementos que se pueden dibujar.

Espero que ayude


Tenía el mismo problema ind WPF usando TabControl y DataGrid. Al aumentar el tamaño del elemento DataGrid, ¡las pestañas de conmutación se vuelven MUY lentas! Después de eso encontré esta publicación leyendo el blog de Bea Stolnitz como lo suponía la respuesta anterior. Eso me dio la pista para googlear "wpf tabcontrol VirtualizingStackPanel" que me da el enlace a DrWPF: http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

Él describe exactamente el problema y da la solución :-))

.... El golpe de perforación es durante la construcción del árbol. Desafortunadamente, si
está utilizando un enfoque MVVM típico con un enlace en ItemsSource
propiedad de TabControl, todo el árbol debe ser reconstruido cada vez
un elemento de pestaña está seleccionado. Esta suele ser una operación muy costosa. ....