我怎样才能加快大Linq查询的数量?

时间:2013-01-17 18:45:57

标签: c# .net linq

我有一些字节数组列表,我与Linq相互结合/互相检查。这些列表和数组的长度可以不同。问题是当我试图计算结果时。此外,如果我添加.Take(1)子句,事情不会改变。我会发布一些代码以便更好地理解。函数Permute()会回复该特定数组的所有排列。

List<byte[]> firstList =new List<byte[]>();
List<byte[]> secondList=new List<byte[]>();
List<byte[]> thirdList =new List<byte[]>();

 IEnumerable<byte[]> sql = (
                            from rid in firstList
                            from s in secondList
                            from p in thirdList
                            from per in Permute(s)
                            where per.SequenceEqual(p)
                            select rid  
                           );

IEnumerable<byte[]> result = (from s in sql
                              where sql.Count(item =>item.SequenceEqual(s)) == 10
                              select s.ToArray()
                             ).Take(1);
if (result.Count() != 0)
{
  byte[] myByte=result.First();
//Do something
}

当我执行result.Count()!=0myByte=result.First()等待时间可能需要一个小时时,如果我限制列表(前十个元素,第二个150和第三个200)。 那么,有没有办法加快计数,或者检查result是否以“快速”的方式包含某些内容?

1 个答案:

答案 0 :(得分:4)

您可以拨打result.FirstOrDefault()来减少一半时间,如果没有结果,则会返回null

这意味着您只需要迭代一次,这意味着您永远不需要遍历整个集合(与.Count()不同)


您还可以通过在第二个查询中编写有效的IEqualityComparer<byte[]>并调用sql.ToLookup()而不是.Count()来加快查询速度。