WPF ListView Rendimiento muy lento-¿Por qué?(ElementHost, u otra razón?)
performance datagrid (2)
Tengo una aplicación de Windows Forms, que tiene un ElementHost único que contiene un WPF UserControl ... en mi WPF, tengo un ListView muy simple:
<ListView Margin="4" ItemsSource="{Binding Notifications}">
<ListView.View>
<GridView>
<GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}" />
<GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}" />
<GridViewColumn Header="Address" DisplayMemberBinding="{Binding Address}" />
<GridViewColumn Header="City" DisplayMemberBinding="{Binding City}" />
<GridViewColumn Header="State" DisplayMemberBinding="{Binding State}" />
<GridViewColumn Header="Zip" DisplayMemberBinding="{Binding Zip}" />
</GridView>
</ListView.View>
</ListView>
Si mi fuente tiene 10 elementos, el formulario se carga en menos de un segundo. Si mi fuente tiene 1000 elementos, ¡tardan 7 segundos! Mi temporizador SÓLO está teniendo en cuenta la carga (no cuánto tiempo lleva obtener los artículos).
Entonces mi pregunta es:
¿Usar un ElementHost es una pesadilla de rendimiento?
¿WPF DataBinding es una pesadilla de rendimiento?
¿El ListView es una mierda? (Por cierto, los mismos resultados con DataGrid de WPFToolkit)?
También puede consultar este excelente artículo sobre el Proyecto de Código:
WPF: virtualización de datos por Paul McClean http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx
Le muestra un enfoque mucho mejor con una memoria mínima y uso de ancho de banda.
Usa la virtualización
<ListView ItemsSource="{BindingNames}"Name="lv">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<!--<StackPanel/>
If StackPanel was used, the memory consumed was over 2GB and dead slow.
-->
<VirtualizingStackPanel>
<!--Memory footprint is only 200 mb-->
</VirtualizingStackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>