0

我有一个项目清单。我解析此列表并根据条件解析此列表中的元素并将它们保存在 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 应该可以加快速度。

4

0 回答 0