在向ListView添加项目时,AddRange不会提高时间性能

时间:2018-01-29 22:54:23

标签: c# .net list listview addrange

我有一个项目列表。我解析这个列表,并根据一个条件,解析这个列表中的元素,并将它们保存在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,我会继续将项目添加到listviews - listViewOne和listViewTwo中,只在for循环中,然后每次将值添加到listview时,它将对整个列表进行排序。如果有几千个元素,则需要花费太多时间。因此,建议使用AddRange来停止绘制和排序元素,除非调用所有EndUpdate()并对整个列表视图进行一次排序。 但是, AddRange在这种情况下需要相同的时间

有人可以看看并告诉可能出现什么问题,因为使用AddRange时应该注意事情。

0 个答案:

没有答案