5

dotTrace を使用する場合、プロファイリング モードと時間測定方法を選択する必要があります。 プロファイリング モードは次のとおりです。

  • トレース
  • 1行ずつ
  • サンプリング

また、時間の測定方法は次のとおりです。

  • ウォールタイム(パフォーマンスカウンター)
  • スレッドタイム
  • ウォールタイム(CPU命令)

トレースと行単位では、スレッド時間の測定を使用できません。それでも、7 つの異なる組み合わせを試す必要があります。私は今、これらの dotTrace のヘルプ ページを十数回以上読んでいますが、どれを選ぶべきかについて最初に知った以上の知識はありません。

Word ドキュメントを読み取り、すべての段落とスタイルを抽出し、その抽出されたコンテンツをループしてドキュメント セクションを選択する WPF アプリに取り組んでいます。このプロセスを最適化しようとしています。(現在、完了するまでに 1 時間以上かかるため、完了するまでではなく、一定の時間プロファイルを作成しようとしています。)

どのプロファイリングと時間測定タイプが最良の結果をもたらしますか? または、答えが「依存する」である場合、それは何に依存していますか? 特定のプロファイリング モードまたは時間測定方法の長所と短所は何ですか?

4

1 に答える 1

6

プロファイリング タイプ:

  • サンプリング: プロファイリング タイプは最速ですが精度は低く、プロファイラーのオーバーヘッドは最小です。基本的に、1 秒間に何度もプログラムを一時停止してスタックトレースを表示するのと同じです。したがって、メソッドごとの呼び出し数は概算です。メソッド レベルでパフォーマンスのボトルネックを特定する場合にも役立ちます。

    サンプリング モードでキャプチャされたスナップショットは、ディスク上のスペースを大幅に削減します (5 ~ 6 スペース少ないと言えます)。初期評価または長時間実行されるアプリケーションのプロファイリング時に使用します (これはあなたのケースのように聞こえます)。

  • トレース: 各メソッドの所要時間を記録します。プロファイリング中のアプリの実行は遅くなりますが、その代わりに、dotTrace は各関数の正確な呼び出し数を示し、関数のタイミング情報はより正確になります。これは、メソッド レベルで問題の詳細を掘り下げるのに適しています。

  • ごと : プログラムを行ごとにプロファイリングします。最大のリソースを消費しますが、最もきめ細かいプロファイリング結果です。プログラムの速度を遅くします。ここで推奨される戦術は、最初に別のタイプを使用してプロファイリングし、次に行ごとのプロファイリング用に関数を厳選することです。


メーターの種類については、偉大な Hadi Hariri によるGetting started with dotTrace Performanceで非常によく説明されていると思います。

壁時間 (CPU 命令) : これは、壁時間 (つまり、壁時計で観察する時間) を測定する最も簡単で最速の方法です。ただし、一部の古いマルチコア プロセッサでは、コア タイマーが同期されていないため、誤った結果が生成される場合があります。このような場合は、パフォーマンス カウンターを使用することをお勧めします。

経過時間 (パフォーマンス カウンター) : パフォーマンス カウンターは Windows API の一部であり、ハードウェアに依存しない方法で時間サンプルを取得できます。ただし、API 呼び出しであるため、すべての測定にかなりの時間がかかるため、プロファイル対象のアプリケーションに影響を与えます。

スレッド時間: マルチスレッド アプリケーションでは、同時実行スレッドが互いのウォール タイムに影響します。このような干渉を避けるために、システム API 呼び出しを行うスレッド時間メーターを使用して、OS スケジューラーによってスレッドに与えられた時間を取得できます。欠点は、スレッド時間サンプルの取得が CPU カウンターを使用するよりもはるかに遅く、スレッド スケジューラが使用するクォンタムのサイズ (通常は 10 ミリ秒) によって精度が制限されることです。このモードは、Profiling Type が Sampling に設定されている場合にのみサポートされます

しかし、それらはあまり違いはありません。


私は自分自身をプロファイリングする魔法使いではありませんが、あなたの場合、実行に途方もなく長い時間がかかる関数のリストを取得するためにサンプリングから始めて、行ごとのプロファイリング用にマークします.

于 2012-03-10T22:15:08.067 に答える