在使用foreach枚举内容之前添加对集合计数的检查是否会有任何性能提升?
if (users.Count != 0) {
foreach (var user in users) {
// do what snowmen do in summer
}
}
VS
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
}
}
}
答案 0 :(得分:9)
这两个脚本具有相同的结果。
如果计数为零,Foreach将不会执行任何操作,因此不需要if语句。
在纳秒和更大的时间内执行的差异并不快,如果列表中有项目会更慢,但在这两种情况下你不会注意到任何事情。
答案 1 :(得分:0)
第一个版本可能已经退化。
很有可能,foreach的第一条指令是对空虚的快速测试。所以你基本上重复了两次。
无论如何,这种“纳米优化”在实践中没有明显效果。
(除非在绝大多数情况下,Count为零。)