for (int i = 0; i < str.Length; i++)
{
      for (int j = 0; j < lbxMB.Items.Count; j++)
      {
           if (str[i].Trim().Equals(lbxMB.Items[j].ToString().Trim()))
           {
               lbxMB.Items.RemoveAt(j);
            break;
            }
       }
}
lbxMB是一个ListBox控件,str是一个string数组,我的功能是根据外部文件中的数据和ListBox中的数据做比较如果有相同的就删除ListBox中的数据。比如说str数组中四万条数据。listBox中四万条数据的话执行速度需要40多秒。如何效率更高啊!跪求高手指教!

解决方案 »

  1.   

    用ListBox就这样,除非你改便存储方式,比如用键值对的方式存储,哈希啊,字典啥的,这样可以根据键值直接找到
      

  2.   

    建议你把两个集合放在Datatable中,做查询过滤, NOT IN 就剩下的加载到LISTBOX 里,
    还是要看 你删除的多,还是加载的多,
    如果删除的多,不如全删除掉,把 有用的重新加载到LISTBOX里面去.
      

  3.   

    lbxMB.Items 先排序一下. 然后使用折半算法应该能好点吧.
      

  4.   

    1.用linq,他有类似求并集结果的功能。而且速度快。2、直接对比str和listbox的数据源,或对比的时候禁止listbox更新UI。例如:lbxMB.Items.RemoveAt(j);这句会消耗性能
      

  5.   

    我刚看了一下linq,没有对应的方法. 我弱弱的问一句. listBox的数据源是那里来的?
      

  6.   

      for (int j = 0; j < lbxMB.Items.Count; j++)有问题,应该是从大到小,修改后集合就变了
      

  7.   

    BeginUpdate
    EndUpdate
    可以提高效率
      

  8.   


    lbxMB.BeginUpdate();
     for (int i = 0; i < str.Length; i++)
                        {
                            for (int j = 0; j < lbxMB.Items.Count; j++)
                            {
                                if (str[i].Trim().Equals(lbxMB.Items[j].ToString().Trim()))
                                {
                                    lbxMB.Items.RemoveAt(j);
                                    break;
                                }
                            }
                        }
    lbxMB.EndUpdate();以前的要50多秒。现在要17秒!还能再快吗