2010-11-22 10 views
3

三項演算子のインブリケーション:私は疑問に思って

Background = Application.Current.Resources[condition ? BackgroundName1 : BackgroundName2] as Brush; 

と::

Background = condition ? Application.Current.Resources[BackgroundName1] as Brush : Application.Current.Resources[BackgroundName2] as Brush; 

どんな違いがあるこれらの2つのバージョン間のパフォーマンスの面で最高の命令は何ですか?はいの場合は、どちらが良いですか?

おかげ

NB:BackgroundName1 & 2は、単純に全く

+3

イルを見ましたか?最初のものは読むのが簡単ですが、他のすべての懸念をはるかに上回りますが「それは機能しますか?私見では。 – annakata

+0

読みやすく保守しやすいものを使用してください。 – PetPaulsen

+8

それは問題ではありません。パフォーマンスに問題がある場合は、その原因となるコード行にはなりません。問題がなければ早すぎる最適化が心配です。 –

答えて

5

最初の文字は短くて読みやすいです。

メンテナンスも簡単です。
後で別のリソースディクショナリを読むためにそれを変更すると、2番目のものの後半を変更するのを忘れることがあります。

最初のものは、同じ辞書からより明確に読んでいます。

+0

ありがとう。私はパフォーマンスの問題がありますが、私は実際にその行を微調整する必要性を確信していませんでしたが、好奇心の外にちょうど... – David

0

差異をストリングスされていません。

2

マイクロ最適化にも巻き込まれないでください!パフォーマンスの向上は得られません。最後に理解しやすく読みやすいコードを探しましょう。

3

最初に、プロファイラーを使用して最も遅いものを見つけます。パフォーマンスの問題が発生している場合は、すでに十分速い速度で作業することに数時間か数日を費やすことは意味がありません。

2番目:両方の方法で試してみて、違いがあるかどうかを慎重に測定して、質問に対する回答を判断できます。より速いものは私たちに聞かないでください。我々はそれを試していないし、それを試す能力がないので、私たちは知らない。

+0

実際に、私は彼らが_identically_を実行することは合理的に確信しています。どちらの場合も、キャスト、辞書ルックアップ、およびプロパティゲッターを1回実行します。悪性の副作用がない限り、違いはありません。 – SLaks

+2

@SLaks:あなたが正しいと確信しています。私の古いデベロッパーのマネージャーは、「あなたはあなたの車にそれを賭けると確信していますか?私が長年にわたってパフォーマンスについて学んだことがあった場合、複雑なシステムのパフォーマンスは深刻な直観に反することがあります。例えば、我々は最近、収集圧力に制約されたシステムをチューニングしており、多数の割り当てを取り除いたときにプログラムが遅くなってしまうことを発見しました*。これらの割り当てはちょうど正しい方法でいくつかの他のブロックを整列させたばかりです... –

+0

はい。 [別の例があります](http://stackoverflow.com/questions/3046805/why-is-dictionary-first-so-slow) – SLaks

関連する問題