联合条件和多个Where方法调用之间是否存在差异?

时间:2013-05-18 08:40:39

标签: c# algorithm linq

周六早上我坐在这个阴天的时候想着自己:

IEnumerable<SomeType>
  someThings = ...,
  conjunctedThings = someThings.Where(thing => thing.Big && thing.Tall),
  multiWhereThings = someThings
    .Where(thing => thing.Big).Where(thing => thing.Tall);

直观地说,我会说 conjunctedThings 的计算速度不会比 multiWhereThings 慢,但是在一般情况下确实存在差异吗?

我可以想象,如果大的东西和高大的东西取决于分享,计算可能会有所不同,但我不想忽视这方面。

我还需要考虑其他任何属性吗?例如。可枚举的类型还是其他什么?

2 个答案:

答案 0 :(得分:1)

一般来说,MultiWhere会更慢。它需要处理更多的项目并调用更多的lambdas。

答案 1 :(得分:0)

如果someThings包含n个项目,mBig,那么对于conjucated-things的lambda称为n次,而lambda为多地方被称为n+m次。如果两个序列的用户打算迭代所有内容,则这是正确的。由于Where方法在内部执行yield return,因此迭代次数可能会更少,具体取决于集合的用户。换句话说,上面的数字是最坏情况的估计。