ReactiveUI - Ver rendimiento del localizador
En miWPF
aplicación que hace uso deReactiveUI
He notado un área de bajo rendimiento.
Tengo un modelo de vista que contiene muchos otros modelos de vista livianos (piense en 30ish). Estos modelos de vista anidados son simples, generalmente representan un botón cada uno. Todos se muestran dentro de un control de usuario, dentro de unItemsControl
que está conectado usando ReactiveUI'sOneWayBind
. Esto significa que cada elemento se muestra usandoViewModelViewHost.
En mi potente PC de escritorio, cuando navego a este modelo de vista, hay un retraso notable entre presionar el botón "ir al modelo de vista" y cambiar la vista, alrededor de 0,5 segundos. Cuando ejecuto el mismo software en una Power-PC, el retraso es de casi 4 segundos. Este es un problema bastante grande desde el punto de vista de UX.
Lo que he aprendidoIntenté perfilar y depurar mi código durante mucho tiempo, y no encontré áreas problemáticas. Zilch (nota:usando JustMyCode en VS para que ReactiveUI no apareciera) Sin embargo, encontré una manera de eliminar el problema. En lugar de vincularse a laItemsControl.ItemSource
conOneWayBind
, Lo hice en XAML, como tal:ItemSource={Binding MyViewModels}
y configurando elDataTemplate
a mano. Esto da como resultado una transición mucho más rápida.
Cuando te unes conOneWayBind
con unItemsControl
, unaViewModelViewHost
se crea automáticamente para usted y elViewLocator
se utiliza para encontrar la vista de su modelo de vista. Asumo que esto es muy lento por alguna razón.
¿Alguien sabe cómo puedo evitar este impacto en el rendimiento sin tener que definir manualmente muchas plantillas de datos para un ItemsControl? Si tengo modelos de vista de modelos de vista de modelos de vista, entonces las cosas tienden a ponerse feas muy rápidamente. De mis experiencias pasadas conCaliburn.Micro
, las convenciones de ubicación de vista fueron muy rápidas, por lo que también me pregunto si no estoy usandoReactiveUI
correctamente, y que hay un enfoque alternativo que es más rápido.
Gracias.
TLDR;ViewModelViewHost
como unDataTemplate
para ~ 30 modelos de vista hace que las vistas sean muy lentas cuando se cargan inicialmente, dejando que la IU parezca que se ha bloqueado. Hay alguna manera de evitar esto?