C# 使用条件C的循环性能#
如果我们假设#1中的if块将在#2中越来越少地执行,那么哪一个执行得更好C# 使用条件C的循环性能#,c#,asp.net,performance,C#,Asp.net,Performance,如果我们假设#1中的if块将在#2中越来越少地执行,那么哪一个执行得更好 我构建了#2,以减少使用if条件的次数。但是,我想知道这是必要的还是有用的。在每种情况下,都将测试条件。如果条件为“false”,则在#1中,它将跳到If块的末尾(并因此移动到下一个foreach项),在#2中,它将执行“continue”,这基本上做相同的事情 正确/错误的频率应该不会对此产生影响。在每种情况下,都将测试条件。如果条件为“false”,则在#1中,它将跳到If块的末尾(并因此移动到下一个foreach项)
我构建了#2,以减少使用if条件的次数。但是,我想知道这是必要的还是有用的。在每种情况下,都将测试条件。如果条件为“false”,则在#1中,它将跳到If块的末尾(并因此移动到下一个foreach项),在#2中,它将执行“continue”,这基本上做相同的事情
正确/错误的频率应该不会对此产生影响。在每种情况下,都将测试条件。如果条件为“false”,则在#1中,它将跳到If块的末尾(并因此移动到下一个foreach项),在#2中,它将执行“continue”,这基本上做相同的事情
正确/错误的频率应该不会对此产生影响。它生成几乎完全相同的IL。即使存在差异,也将是如此微小,以至于您无法测量性能增量
我会选择一个清洁的愿望,而不是性能。“continue”键工作,很像“break”语句,经常被维护代码的其他开发人员忽略。这在包含大量代码的更详细的foreach循环中尤其如此。因此,我更喜欢使用嵌套的if-then-do而不是if!继续。它生成几乎完全相同的IL。即使存在差异,也将是如此微小,以至于您无法测量性能增量
我会选择一个清洁的愿望,而不是性能。“continue”键工作,很像“break”语句,经常被维护代码的其他开发人员忽略。这在包含大量代码的更详细的foreach循环中尤其如此。因此,我更喜欢使用嵌套的if-then-do而不是if!继续。两个代码是等效的。
不要忘记CPU不会运行您的C#代码。
首先,您的C#代码将被编译成IL。很可能这两种代码最终都会产生相同的IL。
然后,IL将以特定于CPU的方式编译成机器代码。
然后CPU将使用分支预测按顺序运行机器代码指令。由于分支预测,“if”很可能花费零周期。
这两个代码是等效的。
不要忘记CPU不会运行您的C#代码。
首先,您的C#代码将被编译成IL。很可能这两种代码最终都会产生相同的IL。
然后,IL将以特定于CPU的方式编译成机器代码。
然后CPU将使用分支预测按顺序运行机器代码指令。很可能由于分支预测,“if”成本为零周期。
如果您想做更多的函数方法,请像这样将条件完全从循环中拉出(需要Linq):
如果您想做更多的函数式方法,请像这样将条件完全从循环中拉出(需要Linq):
应该很容易测试自己。:)或者您可以使用LINQ并完全删除它。应该很容易测试您自己。:)或者您可以使用LINQ并完全删除它。我更喜欢相反的方法,主要是为了减少嵌套。在这种情况下,在真正执行任何工作之前,您将缩进两次,从而在代码文件中浪费大量空白,需要更多换行。在这种情况下,我更喜欢使用continue的倒if;这将是循环中的第一行或第二行,因此比你想象的更容易找到。我更喜欢相反的方法,主要是为了减少嵌套。在这种情况下,在真正执行任何工作之前,您将缩进两次,从而在代码文件中浪费大量空白,需要更多换行。在这种情况下,我更喜欢使用continue的倒if;这将是循环中的第一行或第二行,因此比你想象的更容易找到。
foreach()
{
if
{
block here
}
}
or
foreach()
{
if !( )
continue
}
foreach(var item in MyEnumeration.Where(x=> /* conditional on x */))
{
}