私の質問: パフォーマンステストは一般に、アプリケーションがさまざまなモジュールと統合され、展開の準備が整った後に行われます。スタティックコード分析とアプリケーションパフォーマンスとの間には関係がありますか?
開発段階でパフォーマンスのボトルネックを特定する方法はありますか。コード分析は何かのヒントを投げかけますか?
私の質問: パフォーマンステストは一般に、アプリケーションがさまざまなモジュールと統合され、展開の準備が整った後に行われます。スタティックコード分析とアプリケーションパフォーマンスとの間には関係がありますか?
開発段階でパフォーマンスのボトルネックを特定する方法はありますか。コード分析は何かのヒントを投げかけますか?
すべてはコード分析中に実行するルールに依存しますが、CAだけでパフォーマンスのボトルネックを防ぐことはできません。
私の期限切れから、パフォーマンスの問題は通常かなり複雑で、実際の問題を見つけるにはパフォーマンステストを実行する必要があります。
非常に軽微な場合を除いて(たとえば、Javaの場合、文字列の追加ではなくループ内でStringBuilderを使用します)。
なぜなら、関連するデータセットでアプリケーション全体を実行するまで、特定のコードがアプリケーション全体にどのように影響するのかわからないからです。
たとえば、半数ダースの要素のリストを一貫してソートしている場合、bubblesortをquicksortに変更してもアプリケーションに大きな影響はありません。または、あなたが夜中に一度ソートを実行している場合は、他の処理を遅らせることはありません。
私たちが.NETを話しているのであれば、はい、いいえ... FxCop(または組み込みコード解析)には、パフォーマンスに関する懸念を扱ういくつかのルールがあります。しかし、このリストはかなり短く、本質的に限られています。
FxCopは、潜在的な問題領域を捕らえてフラグを立てるもっと多くのルール(ヒューリスティックな方法など)で拡張することができないという理由はありません。これは誰も(私が知っている)誰もまだこれに重大な作業をしていないという事実です。
一般的に、いや、from experienceが、私は私が前に見たことがないシステムを見て、パフォーマンスの問題になりやすいですいくつかの設計手法を認識することができます
ラインの面で、それどのくらいですコードの数、またはクラスの数?これは、過剰設計によるパフォーマンスの問題と強く関連しています。
いくつの抽象化層がありますか?各レイヤーは、必要以上に多くのサイクルを費やすチャンスです。特に、各操作が「かなり効率的」であると認識されている場合は、この効果が得られます。
個別のデータ構造が一致する必要がありますか?もしそうなら、これはどのように行われますか?通知を通じて、データ構造を緊密に同期させようとする試みがある場合、それは赤い旗です。
システムへの入力情報のカテゴリのうち、いくつかは低頻度で変化しますか?そうであれば、 "解釈される"より "コンパイルされる"べきである。これは、パフォーマンスと開発の容易さの両方に大きな勝利をもたらす可能性があります。
共通のモチーフは次のとおりです。プログラマーAは、DBアクセスのような複雑な操作をラップする関数を作成して、大量の情報を収集します。プログラマーAはこれを他のプログラマーにとって非常に有用であると考えており、これらの機能が特別な意味で使用されることを期待しています。プログラマーBは、これらの強力な機能を高く評価し、1行のコードで多くのことを行うため、多くの機能を使用します。 (プログラマBとAは同じ人になることができます。)これは、特に複数のレイヤーに分散している場合、これがパフォーマンス上の問題の原因となっていることがわかります。
これは最初のことです。
コード解析中に実行するルールに依存します。 役立つコードに対して実行する必要がある基本規則はありますか? – balalakshmi
これは、使用しているフレームワークによって異なります。たとえば、FxCop(.NETソリューション用)を使用しています。あらかじめ定義されたパフォーマンスルールのセットがあります:http://msdn.microsoft.com/en-us/library/ms182260.aspxしかし、私が前に述べたように、彼らは実際の問題をターゲットにしているとは思わないのです。 – brzozow