我有一个项目清单。我解析此列表并根据条件解析此列表中的元素并将它们保存在 2 个单独的列表中 - listOne 和 listTwo(类型 - ListViewItem)。稍后,我在这两个列表上调用 AddRange 以将它们添加到单独的 listViews - listViewOne 和 listViewTwo 中。这是代码 -
listViewOne.Sorting = System.Windows.Forms.SortOrder.Ascending;
listViewTwo.Sorting = System.Windows.Forms.SortOrder.Ascending;
private void AddRangeExample()
{
// MessageBox.Show("say what!!");
ListViewItem NewlyCreatedItem = null;
var listOne = new List<ListViewItem>();
var listTwo = new List<ListViewItem>();
listViewTwo.BeginUpdate();
listViewTwo.Items.Clear();
listViewOne.BeginUpdate();
listViewOne.Items.Clear();
for (int i = 1; i <= count; i++)
{
// code to fetch item from main list.
if (//condition in main list)
{
if (// condition)
{
NewlyCreatedItem = new ListViewItem(// element from main list);
listOne.Add(NewlyCreatedItem);
}
else
NewlyCreatedItem = new ListViewItem(//element from main list);
listTwo.Add(NewlyCreatedItem);
}
}
}
ListViewItem[] listOneArr = listOne.ToArray();
ListViewItem[] listTwoArr = listTwo.ToArray();
listViewOne.Items.AddRange(listOneArr);
listViewOne.EndUpdate();
listViewTwo.Items.AddRange(listTwoArr);
listViewTwo.EndUpdate();
}
现在,如果我不使用 AddRange,而是继续将项目添加到列表视图 - 仅在 for 循环中的 listViewOne 和 listViewTwo,那么每次将值添加到列表视图时,它都会对整个列表进行排序。如果有几千个元素,那将花费太多时间。因此,建议使用 AddRange 来停止元素的绘制和排序,除非调用所有 EndUpdate() 并对整个列表视图进行一次排序。但是,在这种情况下,AddRange 需要相同的时间。
有人可以看看并告诉您可能出了什么问题,因为使用 AddRange 应该可以加快速度。