首页 > 解决方案 > 如何加快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 记录存在。(我确实添加了全文搜索,否则......)

标签: c#vb.netwinforms

解决方案


您是否尝试过使用数据绑定而不是直接使用 Listview.Items?因此,您可以将 ItemsSource 设置为 null,然后(异步?)清空实际列表。


推荐阅读