c# - 如何加快ListView的处置
问题描述
如何加快 ListView 控件的处理速度?
一点背景知识:这个解决方案使用的是 MaterialSkin,所以我的可用控件列表是有限的(例如,没有 ListBox 或 DataGridView)。其次,该列表的项目数量多得不合理(平均 51k,一列或两列,具体取决于设置),所以我并不期待闪电般的速度,但也不是我所看到的。
当表单关闭时,我不需要列表中的任何内容。它已经达到了它的目的,并且可以消失。这是我尝试过的:
Close(); --- 16 seconds (just closing the form)
MyListView.Dispose(); --- 16 seconds
MyListView.Items.Clear(); --- 16 seconds
MyListView.Clear(); --- 17 seconds
MyListView.BeginUpdate();
MyListView.Items.Clear(); --- 16 seconds
实际上,我尝试过的每个选项大约需要 16 秒才能摆脱列表。现在,填充列表大约需要 16 秒,这也是我正在研究的问题——但至少有一些时间是合理的,因为我用太多的记录来超载这个糟糕的列表。在那里,我知道 ListView 必须处理放置项目的开销。在移除方面,没有那么多。
注意:表单正在使用 ShowDialog 显示——因此在 16 秒结束之前不会返回控制。一个后备计划是使用 Show 并在对话框正在关闭时触发事件。
是的,我认为显示 51k 条记录是糟糕的 UI,并且已经多次向客户解释过;目前,坚持 51k 记录存在。(我确实添加了全文搜索,否则......)
解决方案
您是否尝试过使用数据绑定而不是直接使用 Listview.Items?因此,您可以将 ItemsSource 设置为 null,然后(异步?)清空实际列表。
推荐阅读
- c# - 暮光之声
- DotNetCore - Digits 参数始终为空 - android - fetching data from Firebase with Android Kotlin
- java - 在反应流上递归加载和映射
- javascript - The order of photos in modal windows
- r - Reshape data using pivot_wider function
- amazon-s3 - Kafka连接s3 sink多个分区
- angular - 我可以在当然有 Api 的同一个 FastApi 中提供 Angular 应用程序吗?
- docker - Traefik 2 howto basicauth 非 docker 服务?
- r - 合并R中没有唯一列的两个数据集
- r - Grouping, Selecting, and Mutate using R