【发布时间】:2014-10-13 11:12:59
【问题描述】:
在使用 foreach 枚举内容之前添加对集合计数的检查是否会提高性能?
if (users.Count != 0) {
foreach (var user in users) {
// do what snowmen do in summer
}
}
对比
foreach (var user in users) {
// do what snowmen do in summer
}
我的函数花费的时间有点太长,所以我想知道这是否会稍微提高性能,以将我的函数执行时间缩短到我需要的地方。
编辑(执行此循环的上下文):
for (DateTime day = dayStart; day < dayEnd; day = day.addMinutes(30)) {
// Other actions
if (users.Count != 0) {
foreach (var user in users) {
// do what snowmen do in summer
}
}
}
【问题讨论】:
-
这就是所谓的过早优化。您应该使用
if(users.Any())或if(users.Count != 0)的唯一原因是您要处理没有用户的情况。 -
你试过了吗?不过可能没有任何区别。
-
否;这不是一个改进:优化器可以自己做这么简单的把戏。如果您希望更快地实现,请仔细检查代码 within
foreach循环。 -
你必须测量,这很大程度上取决于处理器预测分支的可能性。错误预测的分支非常昂贵。 this post 覆盖得很好。
-
在现代处理器上,for and for-each loops compile to roughly an if-statement wrapped around a do-while。该隐式 if 语句精确地检查零。因此,如果编译器不删除它,包装另一个(冗余)if 语句实际上可能是 悲观。
标签: c# if-statement optimization foreach