0

我坐在这个阴天的星期六早上想着自己:

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

直观地说,我会说conjunctedThings的计算速度不会比multiWhereThings慢,但在一般情况下真的有区别吗?

我可以想象,根据大事和高大的份额,计算可能会以不同的方式进行,但我想忽略这方面。

还有其他我需要考虑的属性吗?例如,可枚举的类型或其他什么?

4

2 回答 2

1

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

于 2013-05-18T08:47:18.623 回答
0

如果someThings包含n项目,则m其中Big的 lambda 称为共轭事物,n而用于多处的 lambda 称为n+m时间。如果两个序列的用户打算迭代所有内容,这当然是正确的。由于该Where方法在yield return内部执行,因此迭代次数可能会更少,具体取决于集合的用户。换句话说,上面的数字是最坏情况的估计。

于 2013-05-18T08:53:19.077 回答