C# 使用ListView.CheckedItems慢的问题

看一段代码:

            List<string> list = new List<string>();

            for (int i = 0; i < lstView.CheckedIndices.Count; i++)
            {
                list.Add(lstView.CheckedItems[i].SubItems[1].Text);
            }

看上去没什么问题。可是今天我运行时,发现速度缓慢得像蜗牛一般。我的ListView有两千多条记录,全部处于选中状态。速度无法忍受,估计秒种处理的记录只有两三条。

一开始以为 List 占内存太多造成的慢,但后来测试,下边代码并没有问题,速度很快,所以问题出现在lstView.CheckedItems[i].SubItems[1].Text 这句代码上。

            for (int i = 0; i < lstView.Items.Count; i++)
            {
                list.Add(lstView.Items[i].SubItems[1].Text);

            }

针对于使用ListView.CheckedItems慢的问题,可是换成了以下代码后,就完全正常了,飞快的就执行完了。

            ListViewItem item;
            for (int i = 0; i < lstView.Items.Count; i++)
            {
                item = this.lstView.Items[i];
                if (item.Checked)
                {
                    list.Add(item.SubItems[1].Text);
                }
            }

具体什么原因引起的,我想应该是每次循环调用lstView.CheckedItems[i].SubItems[1].Text时,都会重新检测哪些项处于选中的状态或者涉及到装箱拆箱的缘故吧。

原文地址:https://www.cnblogs.com/hanguoshun/p/12759590.html