Los paneles que menciona son paneles de diseño, por lo que una breve descripción del sistema de diseño sugiere que probablemente no se trate solo de una lista simple del panel más eficiente, sino de cómo usar los paneles que tienen el mayor efecto en la eficiencia y el rendimiento.
LayoutSystem_Overview :
En su forma más simple, el diseño es un sistema recursivo que lleva a un elemento a ser dimensionado, posicionado y dibujado. Más específicamente, el diseño describe el proceso de medir y organizar los miembros de la colección Children de un elemento Panel. El diseño es un proceso intensivo. Cuanto más grande sea la colección Children, mayor será el número de cálculos que deben hacerse. La complejidad también se puede introducir en función del comportamiento de diseño definido por el elemento Panel que posee la colección. Un Panel relativamente simple, como Canvas, puede tener un rendimiento significativamente mejor que un Panel más complejo, como Grid.
Cada vez que un elemento UIElement secundario cambia su posición, tiene el potencial de activar un nuevo pase por el sistema de diseño. Por lo tanto, es importante comprender los eventos que pueden invocar el sistema de diseño, ya que la invocación innecesaria puede conducir a un bajo rendimiento de la aplicación. A continuación se describe el proceso que ocurre cuando se invoca el sistema de diseño.
1. Un elemento UIE secundario comienza el proceso de diseño midiendo primero sus propiedades centrales.
2. Se evalúan las propiedades de tamaño definidas en FrameworkElement, como Ancho, Altura y Margen.
3. Se aplica la lógica específica del panel, como la dirección de acoplamiento o la orientación de apilamiento.
4. El contenido se organiza después de que todos los niños hayan sido medidos.
5. La colección Niños se dibuja en la pantalla.
6. El proceso se invoca nuevamente si se agregan elementos secundarios adicionales a la colección, se aplica un LayoutTransform o se llama al método UpdateLayout.
Vea LayoutSystem_Measure_Arrange para obtener más información sobre la medición y la organización de los niños.
LayoutSystem_Performance :
El diseño es un proceso recursivo. Cada elemento secundario de una colección Secundaria se procesa durante cada invocación del sistema de diseño. Como resultado, se debe evitar activar el sistema de diseño cuando no es necesario. Las siguientes consideraciones pueden ayudarlo a lograr un mejor rendimiento.
Tenga en cuenta qué cambios en el valor de la propiedad forzarán una actualización recursiva por parte del sistema de diseño.
Las propiedades de dependencia cuyos valores pueden hacer que el sistema de diseño se inicialice están marcadas con banderas públicas. AffectsMeasure y AffectsArrange proporcionan pistas útiles sobre qué cambios en el valor de la propiedad forzarán una actualización recursiva por parte del sistema de diseño. En general, cualquier propiedad que pueda afectar el tamaño del cuadro delimitador de un elemento debe tener un indicador AffectsMeasure establecido en verdadero. Para obtener más información, consulte Descripción general de las propiedades de dependencia.
Cuando sea posible, use un RenderTransform en lugar de un LayoutTransform.
LayoutTransform puede ser una forma muy útil de afectar el contenido de una interfaz de usuario (UI). Sin embargo, si el efecto de la transformación no tiene que afectar la posición de otros elementos, es mejor usar RenderTransform, porque RenderTransform no invoca el sistema de diseño. LayoutTransform aplica su transformación y fuerza una actualización de diseño recursiva para tener en cuenta la nueva posición del elemento afectado.
Evite llamadas innecesarias a UpdateLayout.
El método UpdateLayout fuerza una actualización de diseño recursiva, y con frecuencia no es necesario. A menos que esté seguro de que se requiere una actualización completa, confíe en el sistema de diseño para llamar a este método por usted.
Cuando trabaje con una gran colección Children, considere usar un VirtualizingStackPanel en lugar de un StackPanel normal.
Al virtualizar la colección secundaria, VirtualizingStackPanel solo mantiene los objetos en la memoria que están actualmente dentro del ViewPort principal. Como resultado, el rendimiento mejora sustancialmente en la mayoría de los escenarios.
Optimización del rendimiento: diseño y diseño : este artículo detalla cómo construir el árbol de manera eficiente y ofrece una lista simple de paneles según su complejidad
Lienzo (menos complext = más eficiente y mejor rendimiento)
Cuadrícula
Otros paneles (más complejos = menos eficiente y peor rendimiento)
Otras consideraciones de rendimiento a las que debe prestar atención: Formas de mejorar la velocidad de representación de la interfaz de usuario de WPF
- Caché todo. Pinceles, colores, geometrías, textos formateados, glifos. (Por ejemplo, tenemos dos clases: RenderTools y TextCache. El proceso de representación de las direcciones de cada unidad a la instancia compartida de ambas clases. Entonces, si dos gráficos tienen el mismo texto, su preparación se ejecuta solo una vez).
- Congele Freezable, si planea usarlo durante mucho tiempo. Especialmente geometrías. Las geometrías complejas no congeladas ejecutan HitTest extremadamente lento.
- Elija las formas más rápidas de representación de cada primitivo. Por ejemplo, hay alrededor de 6 formas de representación de texto, pero la más rápida es DrawingContext.DrawGlyphs.
- Habilite el reciclaje de contenedores. La virtualización trae muchas mejoras de rendimiento, pero los contenedores se eliminarán y se volverán a crear, este es el valor predeterminado. Pero puede obtener más rendimiento reciclando contenedores configurando VirtualizingStackPanel.VirtualizationMode = "Recycling"
- A partir de aquí : no existe un límite práctico para la cantidad de anidamiento que su aplicación puede admitir, sin embargo, generalmente es mejor limitar su aplicación para usar solo los paneles que son realmente necesarios para su diseño deseado. En muchos casos, se puede usar un elemento Grid en lugar de paneles anidados debido a su flexibilidad como contenedor de diseño. Esto puede aumentar el rendimiento de su aplicación al mantener elementos innecesarios fuera del árbol.