Tim*_*uri 22 wpf performance datagrid listview elementhost
我有一个Windows窗体应用程序,它有一个包含WPF UserControl的ElementHost ......在我的WPF中,我有一个非常简单的ListView:
<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>
Run Code Online (Sandbox Code Playgroud)
如果我的源有10个项目,表单加载不到一秒钟.如果我的来源有1000个项目,则需要7秒!我的计时器只考虑加载(而不是获取物品所需的时间).
所以我的问题是:
使用ElementHost是一场表演噩梦吗?
WPF DataBinding是一场性能噩梦吗?
ListView是一块废话吗?(顺便说一句,与WPFToolkit的DataGrid相同的结果)?
小智 30
使用虚拟化
<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>
Run Code Online (Sandbox Code Playgroud)
Taw*_*ani 12
您可能还想查看代码项目中的这篇优秀文章:
WPF:数据虚拟化作者:Paul McClean http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx
它以最小的内存和带宽使用率向您展示了更好的方法.
我遇到过一个案例,这里提供的答案并没有解决我的问题。就我而言,将MaxHeight的 属性设置ListView为大于实际显示高度的值可以立即解决该问题,这要归功于此处的答案,即使我无法解释它的工作方式和原因。
| 归档时间: |
|
| 查看次数: |
24379 次 |
| 最近记录: |