Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Optimization 在if语句内继续循环与在循环内使用if语句的求反 例如,让我们考虑以下2个代码: for (i = 0; i < 1000; i++) { if ( i % 2 != 0) { continue; } else { ... } } (i=0;i_Optimization_Loops_Syntax_Execution_Continue - Fatal编程技术网

Optimization 在if语句内继续循环与在循环内使用if语句的求反 例如,让我们考虑以下2个代码: for (i = 0; i < 1000; i++) { if ( i % 2 != 0) { continue; } else { ... } } (i=0;i

Optimization 在if语句内继续循环与在循环内使用if语句的求反 例如,让我们考虑以下2个代码: for (i = 0; i < 1000; i++) { if ( i % 2 != 0) { continue; } else { ... } } (i=0;i,optimization,loops,syntax,execution,continue,Optimization,Loops,Syntax,Execution,Continue,及 (i=0;i

(i=0;i<1000;i++)的

{
如果(i%2==0)
{
...  
}    
}
两者将导致相同的结果。那么使用哪一个呢?哪一个更好?两者之间是否存在显著的性能差异?让我们看看你们看到了什么。我喜欢这里关于这些事情的讨论。这可能会导致更好的代码编写和更好的执行时间。我发布这个问题是因为我没有找到答案。如果我没有找到答案,我将来可能会发布另一个这样的帖子


另外,当您可以不使用continue时,在循环中使用continue的目的是什么?

在这个特定示例中?使用
continue
没有任何意义

正如您提到的,两个代码示例产生完全相同的结果。而且两者都不会比另一个快得多

您选择哪一种应该基于可读性和清晰性,而不是某种误导性的“优化”尝试。考虑到这一点,第二个问题要清楚得多。我会严肃地质疑在真正的代码库中使用第一个的人的编程能力

作为一项基本准则,当一个
if
就可以了时,千万不要使用
if-else
。在本例中,您正在比较
=else
语句找到与之相反的内容,这几乎就像说
!(!=)
,这会产生双负片。很难阅读或理解。一般来说,您应该尝试在
if
语句中评估积极条件,而不是消极条件,以准确地防止出现这种情况


而且,真的没有理由发布与此类似的其他问题。所有答案都是一样的。忽略任何可能的性能差异(如果存在性能差异,这在优化编译器的情况下是不太可能的),并将重点放在哪个版本对您最有意义,因为您必须阅读它。请不要理会任何给你建议的人。

< P>我绝对不会考虑第一个选项,因为在我看来,它为流程添加了不必要的代码路径。我不认为这会在性能方面带来更好的结果,但是如果您想确保您可以检查IL代码。

没有足够的差异来证明使用丑陋的表单是正确的

在这个特定的例子中,比这两种方法都好

For(i = 0; i < 1000; i+=2)
{
    ...    
}
(i=0;i<1000;i+=2)的

{
...    
}

因为根本不需要整除性检查。

for(i=0;i<1000;i+=2)
更好。
continue
的目的是当您的循环中有复杂的决策路径时。很好的答案和注释。而且,这是一个严格的微观优化问题。真正的性能调优从开始,IMHO,开始。只有在讨论C#时才会出现IL代码,这在问题中没有具体说明。而且,假设一旦代码被编译/JIT编译,代码中就会有一个额外的路径,这并不准确。你必须实际编译它,看看你的编译器是否如此愚蠢。当然,我非常怀疑这一点。如今,编译器通常比我们程序员更聪明。啊,是的,著名的if(!isNotX)情况——遵循这样的逻辑总是很有趣的。
For(i = 0; i < 1000; i+=2)
{
    ...    
}