2012-07-25 5 views
29

可能性の重複:
Is the conditional operator slow?ターナーリ? C#で、従来であれば、他のオペレータ対オペレータ

私はC#で?オペレータの大規模なユーザーです。しかし、私のプロジェクトマネージャーは、多くの場合、?演算子を使用すると、大規模アプリケーションのIf-Elseと比較してパフォーマンスが低下する可能性があることを警告します。だから私はそれを使用しないように言われています。しかし、私はそれを使うのが大好きです。なぜなら、それは簡潔であり、コードをきれいに保つことができるからです。

?演算子を使用すると、このようなパフォーマンスのオーバーヘッドはありますか?

+0

ここで良い回答を得ることができます... http://stackoverflow.com/questions/3312786/benefits-of-using-the-conditional-ternary-operator –

+0

このスレッドも読んでください:http ://stackoverflow.com/questions/2259741/is-the-conditional-operator-slow。 IMHO、あなたのマネージャーは –

+0

と思います。他のリンクされた質問は、想定されるパフォーマンスのオーバーヘッドには関係していないと思います(どこから来るのか分かりません)。 – Thilo

答えて

68

1億オペレーターと1億円のIf-Elseステートメントを実行し、それぞれのパフォーマンスを記録しました。コードは次のとおりです。

Stopwatch s = new Stopwatch(); 
// System.Diagnostics Stopwatch 
int test = 0; 
s.Start(); 
for(int a = 0; a < 100000000; a++) 
    test = a % 50 == 0 ? 1 : 2; 
s.Stop(); 

s.Restart(); 
for(int b = 0; b < 100000000; b++) 
{ 
    if(b % 50 == 0) 
     test = 1; 
    else 
     test = 2; 
} 
s.Stop(); 

ここは結果です(Intel Atom 1で実行)。1GBのRAMを搭載した66ghzと私は知っている、それは吸う):

  • 三項演算子:5986ミリ秒または各オペレータごとに0.00000005986秒。

  • If-Else:各ステートメントごとに5667ミリ秒または0.00000005667秒。

は、私はそれらの億を走った、と私はずっと2つの事柄間の0.00000000319秒差を考えていないことをお忘れなく。

+12

+1その統計情報。 –

+1

私はあなたが実際にこれをしたことを愛する! –

19

コードを読みやすくするために使用します。 ifステートメントがそれを行う場合は、それらを使用してください。三項演算子がそれを行う場合は、それらを使用してください。

どちらも同じILにコンパイルされる可能性があります。

アプリケーションを遅くするものは、データベースまたはネットワークまたはハードドライブの可能性があります。ifステートメントまたは3者式を使用したかどうかを除きます。

2

私の個人的な視点からは、三項演算子とif文の間にパフォーマンスの違いはありません。多くのプログラミング言語がそれをサポートしていて、テナント演算子は従来のIf-else演算子が一般的に理解できる。

http://en.wikipedia.org/wiki/%3F%3a

10

性能の違いを期待する理由はありません。

私の意見では、3つのオペランドはすべて3つのオペランドが非常に簡潔で読みやすい場合にのみ使用してください。そうでなければ、コードを読みにくくする可能性があると思います。

多くの人がこの演算子を使いすぎて、あまりにも多くのロジックを1つの長い行に混乱させると思います。行全体が約80文字未満でない限り、私は個人的には使用しません。

グッド:

return isFunky ? funkyValue : null;

悪い:

return (thisThing == thatThing && (anotherThing != null || ! IsThisTrue())) ? someThing.GetThis().GetThat() : yetAnotherThing.GetBlah().GetFoo(); 

私が見た人は、上記よりも多くの悪化しません。私は彼らが三者の特権を失うべきだと思う!

5

三項演算を読みにくいです。ネストされた条件を使用すると、3項を理解することがオーバーヘッドになります。より多くの条件がある場合は、三項関係を避けるようにしてください。