Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用条件C的循环性能#_C#_Asp.net_Performance - Fatal编程技术网

C# 使用条件C的循环性能#

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项)

如果我们假设#1中的if块将在#2中越来越少地执行,那么哪一个执行得更好


我构建了#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 */))
{
}