Tengo una aplicación WPF, y es lenta.WPF: instanciación de plantilla lenta
Es NO la representación. En primer lugar, el renderizado es bastante simple, y en segundo lugar, lo analicé con WPF Performance Toolkit: nada.
Es NOT en mi propio código. En primer lugar, las pruebas de la unidad funcionan rápido, y en segundo lugar, si reemplazo todas las plantillas de datos con las plantillas en blanco, todo funciona rápido.
Hasta ahora, parece que la parte lenta es la instanciación de la plantilla . Es decir, cuando inicia la aplicación y abre una pantalla complicada, toma mucho de tiempo. Y por "mucho" quiero decir "mucho". Algunas veces puede durar hasta 3-5 segundos, por ejemplo, cuando hay una cuadrícula de datos con 100 filas. Pero cuando vas a otra pestaña, y luego regresas a esa misma pantalla, se abre rápido (mientras su modelo de vista permanezca).
Esto es muy molesto no solo porque es lento, sino porque no puedo hacer nada al respecto. Si tuviera algún control sobre la lentitud, podría, tal vez, mostrar un poco de "de apertura, por favor espere" mensaje o algo ...
Además, cuando miro a algunas otras aplicaciones WPF (más notablemente, ILSpy) , parecen funcionar razonablemente rápido, a pesar de la gran cantidad de datos. Esto me hace creer que probablemente estoy haciendo algo mal. Pero no tengo idea de por dónde empezar.
¿Alguna idea? Cualquier error clásico? ¿Algun consejo?
Te estás preguntando y haciendo conjeturas sobre cuál es el problema. No te preguntes No adivine, y no espere que Performance Toolkit se lo diga. [Aquí le mostramos cómo averiguarlo]] (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024) –
@Mike: Sí , Uso esta técnica de muestreo primitiva ampliamente, y me ayuda mucho cuando hay una degradación general del rendimiento. Pero en este caso, simplemente no tengo tiempo suficiente para detener la ejecución, ya que la degradación del rendimiento solo dura, como máximo, 3-5 segundos. Además, en las raras ocasiones en que logré detenerlo, siempre se detiene en las entrañas de WPF. Sí busco esa pista también (con la ayuda de ILSpy), pero hasta ahora parece bastante sin esperanza. Por lo tanto, mi pregunta es más similar a lo que podría estar haciendo mal con WPF. –
Derecha. Se detiene en las agallas de WPF, pero ¿qué hay en la pila? Cada línea en la pila es responsable de ese tiempo. He tenido personas que dicen "Oh, cada vez que lo detengo, está en algún iterador. ¿De qué sirve eso?" La respuesta es * excelente *, ahora solo busca la pila y verás el problema. Si tiene una conjetura sobre cuál es el problema, eso le dirá si tiene razón, y si está equivocado, le dirá cuál es el problema correcto. –