周六早上我坐在这个阴天的时候想着自己:
IEnumerable<SomeType>
someThings = ...,
conjunctedThings = someThings.Where(thing => thing.Big && thing.Tall),
multiWhereThings = someThings
.Where(thing => thing.Big).Where(thing => thing.Tall);
直观地说,我会说 conjunctedThings 的计算速度不会比 multiWhereThings 慢,但是在一般情况下确实存在差异吗?
我可以想象,如果大的东西和高大的东西取决于分享,计算可能会有所不同,但我不想忽视这方面。
我还需要考虑其他任何属性吗?例如。可枚举的类型还是其他什么?
答案 0 :(得分:1)
一般来说,MultiWhere会更慢。它需要处理更多的项目并调用更多的lambdas。
答案 1 :(得分:0)
如果someThings
包含n
个项目,m
为Big
,那么对于conjucated-things的lambda称为n
次,而lambda为多地方被称为n+m
次。如果两个序列的用户打算迭代所有内容,则这是正确的。由于Where
方法在内部执行yield return
,因此迭代次数可能会更少,具体取决于集合的用户。换句话说,上面的数字是最坏情况的估计。