Vb.net 如何有效地在ListView的开头插入多行?

Vb.net 如何有效地在ListView的开头插入多行?,vb.net,winforms,Vb.net,Winforms,我有一个ListView和一组ListViewItem。我只想在列表视图的顶部插入集合中的所有项 目前,我是这样做的: CollectionFlistViewItems.Sort(新的CustomComparer(SortOrder.Descending)) 对于CollectionFlistViewItems中的每个lvi作为ListViewItem TargetListView.Items.Insert(0,lvi) 下一个 由于每个插入操作都将移动ListView中的所有项,因此每个插入

我有一个ListView和一组ListViewItem。我只想在列表视图的顶部插入集合中的所有项

目前,我是这样做的:

CollectionFlistViewItems.Sort(新的CustomComparer(SortOrder.Descending))
对于CollectionFlistViewItems中的每个lvi作为ListViewItem
TargetListView.Items.Insert(0,lvi)
下一个
由于每个插入操作都将移动ListView中的所有项,因此每个插入操作都将花费O(n)时间,这似乎有点浪费


有没有更好的方法可以做到这一点?请注意,我知道但不幸的是,该方法不适用于集合
ListView.Items

无论您是追加还是插入项目,每当您对ListView进行重大更改时,都应该在进行更改之前调用
BeginUpdate()
,然后在进行更改之后调用
EndUpdate()
。这将阻止ListView直观地更新其项(这是花费时间最多的部分)

您的代码应该如下所示:

TargetListView.BeginUpdate()

For Each lvi As ListViewItem In CollectionOfListViewItems
    TargetListView.Items.Insert(0, lvi)
Next

TargetListView.EndUpdate()

参考资料:
  • :

    防止控件在调用方法之前绘制


噢,哎呀,我是说
InsertRange()
而不是
AddRange()
。@Burhan啊,好的。不管怎样,答案都是一样的。使用
BeginUpdate()
EndUpdate()
可以显著缩短执行循环所需的时间。