2011-07-13 3 views
6

私はC#でwinformsを使ってアプリケーションを開発しています。開発中に、私は多くの小さなメソッドを使用したいと思います。 resetPerticularCombo()を使用すると、コードはできるだけクリーンに保たれます。しかし、問題は3-5行のコードのメソッドを作ることでメソッド呼び出しが多すぎる可能性があることです。Visual Studio 2008のコンパイル中にコードのインライン展開を使用していると聞いています。winforms .Net小さなメソッドの使用について

私の質問は、この機能に依存し、小さなヘルパーメソッドの使用に進むべきか、それとも自分でインライン展開を使用するべきかということです。

+3

単なるコードクラッタ(1つの関数だけで使用されるコードのフルブローメソッド)を回避しようとするなら、lambdaで初期化されたローカルの 'Action'または' Func'デリゲートインスタンスを作ることができます。これはどんな点でもパフォーマンスの向上にはなりません(しかし、Jon Skeetの答えはどうしても問題ではありません)が、特に繰り返しコードを持っていると、読みやすくすることがあります。例えば。同じ行を何度も書く必要がある場合、 '' doSomething = c => c = a *(b + c); 'それから、doSomething(g)と呼ぶだけです。 doSomething(h); '。 –

+1

コードの長さが3〜5行のメソッドを持つことは、私にはかなり良いことです。一般的に私はすべてのメソッドをコードの12行よりも小さく保つようにしています。非常に大きなメソッド(長さが数百行でも)を持っていると、デザインに深刻な問題があることを示しています。 – MattDavey

答えて

7

が問題であることが証明されるまで、多くのメソッド呼び出しがあることを心配しないでください。が実際にという問題を引き起こす可能性は非常に低いです(IMO)。そして、それがあなたに読めるコードを与えるなら、それが最も重要なことです。

しかし、テストは、それが許容可能かどうかを常に確認しています。プロファイリングやその他の手法を使用してコードのボトルネックがどこにあるのかを調べ、最も差が大きい箇所でマイクロ最適化を検討してください。

私の経験では、「少数のメソッドを使用する」というレベルでマイクロ最適化を行うと、レベルの高い変更(たとえば、リストの参照から辞書の参照など)と比べてほとんど無意味です。

+0

まず、ボトルネックを見つけることに同意します.-私は最近、System.Diagnostics名前空間でStopwatchの喜びを発見しました。 –

2

私はJon Skeetに同意します。私は小さな開発チーム(5人の開発者を)リードしていますあなたの次

を伝えることができますエンタープライズアプリケーションに関する

。我々は約500kのlocを持つアプリケーションを使っています。

私たちは常に、メソッドが持つべき最も懸念しているものを見つけようとします。だから私たちはたくさんの小さな「自己解明的な」方法を持っています。 結果として、多くの方法があり、これは問題になることはありません。

ほとんどの場合、ボトルネックはSQL Server、ファイルなどのリソースにアクセスしています。 または非同期が不足しています。

また、私は、あなたはants profiderを使用してプロファイリングできる性能を持っています。

私はまた、最適化のこれらの「ルール」のように私は、Web

FirstRuleOfOptimizationにいつか前に発見 - しないでください。

SecondRuleOfOptimization - まだ...しないでください。 P

ThirdRuleOfOptimization - あなたはtimecriticalソフトウェア(グラフィックまたはドライバ関連)を開発する場合、この事がポイントを作ることができますが、.NETはに最高の環境だったら、私はわからないだろう

をProfileBeforeOptimizing do

+0

おかげさまでBoas、espacially最適化のルールについて。 – mohits00691

0

他の答えはすでに述べたように、細かいルーチンはたくさんありますが、可読性とメンテナンスのためにリファクタリングすることを忘れないでください。

resetPerticularCombo()およびは、ルーチンがそれ以外の場合はresetCombo(PerticularCombo)およびresetCombo(AnotherCombo)に変換する価値があります。匿名ラムダで

、これも他の類似のアルゴリズム統合するために使用することができます:(potentailly悪い例が、OPのコードを継続して使用する)ProcessCombo(PerticularCombo, (c)=>c.Reset())ProcessCombo(PerticularCombo, (c)=>c.SelectFirst())

私はVB.NETプログラマーですこのコードは構文チェックなしでSOに直接入力されています。

関連する問題