c# - ListBox 中的 WPF 性能问题
问题描述
你好谁能告诉我在下面的代码中哪里出错了,
<ListView x:Name="ServiceListView"
Loaded="ServiceListView_Loaded"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
VirtualizingPanel.IsVirtualizing="True"
GridViewColumnHeader.Click="ServiceListSort"
ScrollViewer.IsDeferredScrollingEnabled="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListView.View>
<GridView>
<GridViewColumn Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<RadioButton IsChecked="{Binding Status}" x:Name="StartService" Checked="StartService_Checked" GroupName="{Binding ServiceName}" Style="{DynamicResource StartServiceStyle}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="50" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Resources>
<local:InvertBooleanConverter x:Key="InvertBooleanConverter" />
</DataTemplate.Resources>
<RadioButton IsChecked="{Binding Status, Converter={StaticResource InvertBooleanConverter}}" Checked="StopService_Checked" x:Name="StopService" GroupName="{Binding ServiceName}" Style="{DynamicResource StopServiceStyle}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="120" DisplayMemberBinding="{Binding ReccomendedStatus}">
<GridViewColumn.Header>
<GridViewColumnHeader Content="Recommendation"/>
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn Width="750" DisplayMemberBinding="{Binding ServiceName}">
<GridViewColumn.Header>
<GridViewColumnHeader Content="Description"/>
</GridViewColumn.Header>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
目前它有 20-40 个项目,其中只有 7 个可见,大约需要 5-7 秒,删除两个单选按钮 Checked 事件时间减少到 2-4 秒
private void ServiceListView_Loaded(object sender, RoutedEventArgs e)
{
ServiceListView.ItemsSource = DATA_CONTROLS.ServiceData.Values;
}
public static Dictionary<int, DataObject> ServiceData = new Dictionary<int, DataObject>();
为什么在msdn中显示需要这么长时间我看到显示1000个项目只需要1.6秒,为什么这个包含20-40个项目的方法需要5-7秒?我真的需要知道是什么导致了这种性能问题。谢谢你。
发现一个问题:当我设置时:ServiceListView.ItemsSource = DATA_CONTROLS.ServiceData.Values;
它会自动触发单选按钮事件,这会导致性能下降,同时使用 IsAsynch 也提高了性能。
解决方案
在您的 ListView 中添加“IsAsync=True”,以提高性能
推荐阅读
- css - 当用户向下滚动时,React 上的移动设备全屏背景视频在底部有额外的空间
- javascript - 如何通过百分比等计算字段对javascript中的数组进行排序
- rpa - 如何在不更改默认变量设置的情况下在任何地方自动将日期格式更改为 mmm-dd-yyyy?
- python - 查找显示特定值的所有组
- android-studio - 为什么我只看到官方 android 类的反编译源代码?
- c++ - stof()/stoi() 的 C++ 无效参数(std::invalid_argument: stoi: 无转换)
- php - Laravel Collection::toArray() 触发额外的数据库查询
- pytorch - 如何为 PyTorch 中的特定张量释放 GPU 内存?
- javascript - Gatsby 无法从 GraphQL 查询中创建多个子部分?
- javascript - 您如何从 monaco 编辑器中检索主题?