日期:2014-05-17  浏览次数:20845 次

这种计算,如何提升速度?
List<List<string>> list1 = 100万个元素
List<string> list2 = 150个元素

将list1中每个元素和list2的每个元素比对,如果list2中的任何一个元素包含list1的元素的元素4个以上,那么,list1中的该元素则提取出来,如何计算,速度才快些啊,
目前list2是放在Access数据库中的,我试了下在数据库连接状态下读取每行进行比对,速度那叫慢得....

请大神指点...急用..
------解决方案--------------------
对list1分块多线程处理,使用PLinq去list2中匹配,应该有相当大的性能提升
------解决方案--------------------
吧list1中的具有4个或者以上的元素取出来list3,然后list2和list3比,相同就是想要的
------解决方案--------------------
你也可以用分割字符串的方法,吧list1中所有元素取出,放到一个string,用list2中元素分割string,如果得到元素>=5,取出,(要先判断,首尾是否相等,加到string时可以每个元素后加一个空格或者其他)
------解决方案--------------------
引用:
引用:吧list1中的具有4个或者以上的元素取出来list3,然后list2和list3比,相同就是想要的
list1中的每一个元素都具有4个以上的string。这是前提条件,无需判断

既然list1中每个元素都具有4个以上,那么可以下去掉重复再比较。
list1 = list1.Distinct().ToList();//distinct一下数据至少减少了3/4
然后,遍历只有150条记录的list2:
for (int i = 0; i < list2.Count; i++)
{
      if (list1.Contains(list2[i]))
      {
            list3.Add(list2[i]);//结果存在list3中
      }
}
这样可能就好一点。
不过速度慢应该是你数据查询的问题,而不是比较。
------解决方案--------------------
数据放在access,一条一条读出来,这本身就很慢。100万数据一点也不多,直接放内存好了。
------解决方案--------------------
分割字符串。
------解决方案--------------------
用lamda表达式应该会快很多