2016-04-11 7 views
1

問題はありません。私は持っていたと思っていましたが、分かりませんでした。ifから返ってきた場合、elseを使うことにはperfmanceの違いがありますか?

は、あなたが例えば、多くの可能性を通じて確認したいと仮定します。そのような状況で

if(x > 1000) 
{ 
    return 1000; 
} 
if(x > 990) 
{ 
    return 1010; 
} 
if(x > 980) 
{ 
    return 33; 
} 
if(x > 970) 
{ 
    return 2; 
} 
if(x > 960) 
{ 
    return null; 
} 

、だけではなく、もし新しいに入るのだ場合、私はまた、他に使用することができ、それはまったく同じ効果を持っているでしょう。パフォーマンスの違いはありますか?存在する場合、それを行う "より正しい"方法は何ですか?

+1

これが「Java」コードである場合、生成されるバイトコードは同一であることに注意してください。 –

答えて

3

通常はありません。通常の場合、if/else if/elseが優れているのは、この構成で真の条件が1つ見つかった場合に、より良い場合です。

しかし、あなたの場合、違いはありません。

0

私はストップウォッチのクラスを使用して、いくつかのテストコードを実行し、そのほかののIFSは、複数のIFSより少し高速化され表示されます。違いは、いくつかの

private void button1_Click(object sender, EventArgs e) 
{ 
Stopwatch sw = new Stopwatch(); 
     sw.Start(); 
     Bar(1337); 
     sw.Stop(); 

     Console.WriteLine("Else ifs: " + sw.ElapsedTicks); 

     sw.Reset(); 
     sw.Start(); 
     Foo(1337); 
     sw.Stop(); 

     Console.WriteLine("Multiple Ifs: " + sw.ElapsedTicks); 
} 

private bool Foo(int x) 
    { 
     if (x > 1000000) 
      return true; 

     if (x > 100000) 
      return true; 

     if (x > 10000) 
      return true; 

     if (x > 1000) 
      return true; 

     if (x > 100) 
      return true; 

     if (x > 10) 
      return true; 

     if (x > 1) 
      return true; 

     return false; 
    } 

    private bool Bar(int x) 
    { 
     if (x > 1000000) 
      return true; 
     else if (x > 100000) 
      return true; 
     else if (x > 10000) 
      return true; 
     else if (x > 1000) 
      return true; 
     else if (x > 100) 
      return true; 
     else if (x > 10) 
      return true; 
     else if (x > 1) 
      return true; 
     else 
      return false; 
    } 

注ダニの問題だけである:C#.NETのコード例

+0

私は彼らがなぜ違うのかという理由を見ることができないので、それがなぜあるのだろうと思っていますが、間違いなくそうであることを示唆する証拠もありません。なぜ誰かがこの事件の理由を説明できるのだろうか? – pingu2k4

+0

@MatthewParkerコンパイラに依存している –

1

パフォーマンスに関しては、これはおそらく、コンパイラに基づいて変化することができるが、一般的には差があってはなりません。ここに答えてください:

Performance difference of "if if" vs "if else if"

より正確であるという点で、それは関係意図とロジックに完全に依存しています。上記の例では、各条件が早期に終了し、あいまいさの可能性がないため、「if」(「else」なし)を使用するのは完全に正しいです。ただし、条件が早期に終了しなかった場合は、xの単一の値が複数の条件に一致する可能性があります。したがって、正確さは、各条件の論理が複合化されるべきかどうかに基づいており、その結果、ある値を有するxに対して、各一致条件のすべての論理が適用されるべきである。または、最初の条件が満たされたことに応答して、1組のロジックのみを実行する必要があるかどうか(「else if」を使用する必要があります)。私は、インテント以外の「if」と「else if」のどちらかを選択する他の理由と、それぞれの条件が明確で重複していないか、累積的に効果があるかどうかを決して遭遇したことはありません。

関連する問題