2009-02-20 13 views
6

Tengo una ventana usando un WPF ListView/GridView vinculado a un ObservableCollection. El rendimiento es completamente horrible. La aplicación se ahoga al intentar cargar 300-400 elementos y picos de uso de CPU cada vez que se agrega/elimina/modifica un elemento. La creación de perfiles no revela nada obvio.WPF listview/gridview performance horrible, sugerencias

¿Alguien tiene alguna sugerencia?

+0

El DataTemplate siendo utilizado contiene un único TextBlock. –

Respuesta

2

Primero, ¿está haciendo uso de plantillas de datos complejas para cada ListViewItem? Esto puede ser cualquier cosa, desde muchas imágenes, hasta (antiguos) Efectos de mapa de bits, hasta propiedades cargadas perezosas que obtienen datos a pedido desde una base de datos (lo que puede provocar que realices muchas llamadas a db para representar cada imagen, dependiendo de cómo tu modelo de datos trabajos).

En segundo lugar, la lista puede ejecutar sus rutinas cargar/agregar/modificar/eliminar rápidamente (lo que significa que el problema ocurre al renderizar los datos), o la lista hace esos trabajos lentamente (lo que indica que la lista algún tipo de problema).

+0

El DataTemplate que se usa contiene un solo TextBlock. –

+0

No se realizan llamadas a la base de datos. –

+0

¿Puedes compartir un poco más de tu código que reproduce tu problema? ¿Tal vez una nueva solución simple que funcione al mínimo para causarla? – Adrian

7

comprobar estas propiedades fuera:

VirtualizingStackPanel.IsVirtualizing="True" 
VirtualizingStackPanel.VirtualizationMode="Recycling" 
ScrollViewer.IsDeferredScrollingEnabled="True" 
1

Y la más obvia, asegúrese de que haya actualizado a .NET 3.5 SP1, había una gran cantidad de mejoras de rendimiento allí.

También puede valer la pena examinar el control WPF datagridview ya que una gran parte del trabajo de rendimiento en .net 3.5 SP1 fue para que el datagridview tuviera un buen rendimiento en grandes conjuntos de datos.

http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25047