循环有条件的C#
问题描述:
表现在以下这些有更好的表现,如果我们假设,在#1 IF模块将在#多与少2循环有条件的C#
foreach()
{
if
{
block here
}
}
or
foreach()
{
if !()
continue
}
我已经结构化的#2取如果执行条件较少。但是,我想知道这是否有必要,甚至有帮助。
答
在每种情况下,都会测试条件。如果条件是“假”,那么在#1中,它将跳到if块的末尾(因此移动到下一个foreach项目),在#2中,它将执行“continue”,它基本上一样。
真/假的频率应该对此没有影响。
答
它产生几乎完全相同的IL。即使存在差异,如果不能衡量绩效差异,那也是微不足道的。
我会选择一个清洁,而不是性能的愿望。其他开发人员维护代码时往往会忽略'继续'的关键,就像'break'声明一样。在更多详细的包含大量代码的foreach循环中尤其如此。出于这个原因,我更喜欢使用嵌套如果然后做,而不是如果!继续。
答
这两个代码是等效的。
不要忘记CPU不会运行您的C#代码。
首先你的C#代码将被编译成IL。这两个代码很可能最终会产生相同的IL。
然后,IL将以CPU特定的方式编译为机器代码。
然后,CPU将使用分支预测乱序运行机器代码指令。由于分支预测,'if'很可能会导致零循环。
答
如果你想要做更多的功能的办法,拉有条件彻底摆脱这样的循环(需要LINQ):
foreach(var item in MyEnumeration.Where(x=> /* conditional on x */))
{
}
应该很容易测试自己。 :) – 2011-01-06 16:47:20
或者你可以使用LINQ并完全删除它。 – 2011-01-06 17:10:02