C#开发-ListView.CheckedItems的效率

看一段代码:

StringCollection arr  =   new  StringCollection();
            
for  ( int  i = 0 ;i <= lvwExtents.CheckedItems - 1 ;i ++ )
            {
                arr.Add(lvwExtents.CheckedItems[i].Text);
            }


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

可是换成了以下代码后,就完全正常了,飞快的就执行完了。

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


奇怪吧。也许是因为每次循环时调用的lvwExtents.CheckedItems[i].Text代码,都会重新检测哪些项处于选中的状态的缘故吧。

 

 

CheckedItems 属性返回一个集合,该集合包含控件中的所有选中项。

第一种实现方法 每次循环它都会去获取lvwExtents中的所有选中项.然后再取得当前i的索引值.可以这样讲其时间复杂度为O(N2)(因为CheckedItems属性封装了其取得所有选中的算法).而第二种方法其时间复杂度为O(N).

下面是第三种实现方法:楼主可以试试,其性能将会更好.
IList mList=lvwExtents.CheckedItems;

int ItemCount=mList.Count;

for(int i=0;i<ItemCount;i++)
{
arr.Add(((ListViewItem)mList[i])).Text)
}

 

转自http://www.cnblogs.com/watsonyin/archive/2006/11/02/548197.html#1521894

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值