2009-06-15 14 views
0

誰がもっと速くなりますか?なぜ ?C#コードの最適化

1:

Point point = new Point(25,25); //any numbers.. 
Point point2 = new Point(20,95); //any numbers.. 

Graphics g = CreateGraphics(); 
g.DrawLine(point,point2); 

OR

2:

Graphics g = CreateGraphics(); 
g.DrawLine(new Point(25,25),new Point(20,95)); 
+2

はSystem.Diagnostics.StopWatchを使用して、あなたがベンチマークsugest。質問はより多くの聴衆にほとんどまたは全く価値がありません... –

+1

私は質問が有効であると思う、なぜdownvotesを見ないでください! –

+3

質問は有効ですが、無意味です。それは最高でマイクロ最適化であり、最悪では最優先である。 – Eric

答えて

4

どちらも、(特にJITing後の)読みやすさの損失を除いて、それらの間に実質的な違いはありません。

+0

メモリはどうですか?私は最初のものがメモリ内に2つのポイント(オブジェクト)を作成すると思ったが、2番目のものはメモリに作成されないと思った? はそうですか? – Sherif

+1

@mavric - 同じようにスタック上に作成されます(少なくともPointは構造体だと思います)。参照型でも唯一の違いは、#1ではデバッグモードで、メソッドを終了するまでPointオブジェクトが収集されないことです。リリースモードでは、オブジェクトのライフタイムは同じになります。 –

0

2オブジェクトへの中間ポインタを作成していないため、オブジェクトをg.DrawLineに渡す前に2が高速になる可能性があります。しかし、それがポイントとポイント2を使用する唯一の場所であれば、コンパイラーはおそらくバイナリーが同じになるように最適化します。

15

両方のスニペットが同じMSILコード表現にコンパイルされるため、これらのスニペットはありません。

さらに、これはマイクロ最適化であり、実際にはがボトルネックであることを実際に知る前に避けるべきです。

2

どちらも高速で、完全にレンダリングパスでこれらの点を割り当て、それらをprecreates避けものであろう最速1以前のそれはすべてあなたがやっている他に何に依存

0

あなたがほとんど何もしていない(私が疑う)場合、これは「ボトルネック」です。

これは「ボトルネック」であるなら、あなたはまだ支配的だか分からない:

  • 二つの「新しい」sおよび関連するコンストラクタ、デストラクタ、およびガベージコレクション。

  • 実際に線を描画します。

2番目はおそらく避けられないものですが、最初はスタイル上の理由からです。

プロファイリングまたはthis simple methodで調べることができます。

それともあなたが全体の問題を避けることができます。

g.DrawLine(25,25,20,95);