【发布时间】:2015-01-24 07:43:25
【问题描述】:
假设我有以下收藏
IEnumerable<car> cars = new IEnumerable<car>();
现在我需要循环这个集合。
我需要根据车型做一些功能;所以我可以采用以下方法之一:
方法 A:
foreach( var item in cars){
if(item.color == white){
doSomething();
}
else{
doSomeOtherThing();
}
}
或其他方式:
方法 B:
foreach( var item in cars.where(c=>c.color==white)){
doSomething();
}
foreach( var item in cars.where(c=>c.color!=white)){
doSomeOtherthing();
}
对我来说,我认为方法 A 更好。我只在集合上循环一次 而方法 B 似乎很诱人。框架将为您循环和过滤集合。
那么哪种方法更好更快?
【问题讨论】:
-
这可能是过早优化的情况,但第一个循环通常更快,虽然不是因为它只循环一次——它会更快,因为它不分配任何内存并避免额外的功能来电。 (第二个版本必须为两个 lambdas 和可能的两个枚举器分配内存,加上为每个项目调用一次 lambda 函数。)更快的方法是让您的数据已经分成两组并在每个组上执行两个紧密循环。如果做不到这一点,让它们按颜色排序也会有所帮助,因为分支预测器可以做得很好。
-
顺便说一句,名字/头像组合很棒:-)
-
您是否认为 LINQ 扩展没有进行比较?
-
Ed S. 我想知道使用 linq 过滤是否比使用 if-else 更快
标签: c# collections foreach