看一段代码:
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时,都会重新检测哪些项处于选中的状态或者涉及到装箱拆箱的缘故吧。