.NET をサポートする CPU プロファイラを探しています
- スレッドの多いアプリ。
- (ダブル) クアッドコア CPU。
- サンプリングプロファイリング。
- 64 ビット OS。
- コマンドライン API。
現在、ほとんどの .NET プロファイラーで問題が発生しています。特に、
- YourKit はコマンドラインをサポートしていないようです。
- dotTrace 3.1 が 64 ビット OS でクラッシュします。
Intel VTune はまだ試していません。賢明な提案はありますか?
.NET をサポートする CPU プロファイラを探しています
現在、ほとんどの .NET プロファイラーで問題が発生しています。特に、
Intel VTune はまだ試していません。賢明な提案はありますか?
スレッド化は、あるスレッドが別のスレッドの待機をブロックされている時間と、スレッドが作業を待機している時間をカウントする方法がわからないという点で、ほとんどのプロファイラーを混乱させる傾向があります(スレッドプールを使用していない場合)。
私たちの経験でチェックすべき2つのプロファイラーがあります 。1。Eqatechには、プロファイリング用のコードインジェクションを行う無料のプロファイラーがあります。メソッドレベルまでしか機能しませんが、64ビットで機能し、時間の流れを把握できます。2. Red-Gate ANTプロファイラーは、ラインレベルのタイミングをドリルダウンするために使用した最高のものです。これは、実行時間のかなりの部分でスレッドが相互に待機するのをブロックされるシナリオがある場合に重要です。
とはいえ、ユーザーインターフェイスなしでテストを実行できる場合は、毎回まったく同じ方法ですばやく簡単に繰り返すことができるように、いくつかのNUnitパフォーマンステストを設定することを強くお勧めします。これを行うと、メソッドレベルのプロファイラーを使用しても時間がどこに向かっているのかを確認したり、個々の最適化を提案して確認したりできます。スレッドが互いに待機するため、ある場所から時間がかかると、別の場所に時間が追加されることに驚かれることでしょう。 、したがって、完全に再現可能なテストを行うことは非常に便利です。
EqatechプロファイラーはコンパイルされたILを変更するため、そのILを再実行すると、新しいパフォーマンストレースファイルが取得されるため、コマンドラインシナリオに適合します。ANTも同様に機能すると思います。
最後に、アプリケーションを複数の環境で使用する場合は、単一のプロセッサまたはハイパースレッドのみのプロセッサでいくつかのパフォーマンステストを実行することを強くお勧めします。マルチコアのチューニングについて非常に積極的になると、デッドロックが発生したり、少数のプロセッサで速度が低下したりするほどのオーバーヘッドが追加される可能性があります。
Redgateにはプロファイラーがありますが、必要なものがすべて揃っているかどうかはわかりませんが、試してみてください。:)
あなたの目標は何ですか?
実行時間とルーチンの数を測定したい場合は、プロファイラーが必要だと思います。
パフォーマンスの問題を見つけて修正できるようにする場合、それは別の問題です。
どういうわけか、それらが同じであるという考えが一般的になったので、私は尋ねているだけです.
後者の目的のために、これを試した人は、スレッドのコール スタックのランダムな時間のサンプルをいくつか調べることが、パフォーマンスの問題を見つけるのに非常に効果的な方法であることを理解しています。
Java では、すべてのスレッドを同時に停止してコール スタックをダンプできることを知っています。.net 開発環境でも同じことができると思います。
そうでない場合は、IDE で実行し、一度に 1 つのスレッドを停止して、無駄なサイクルがないかどうかを確認します。そうであれば、それを修正するだけです。何も見つからなくなるまで繰り返します。
すべてのスレッドに対してこれを行うと、少なくとも、遅さは特定のスレッドの遅さによるものではないことがわかります。不要なメッセージ トラフィックの問題が引き続き発生する可能性があります。これは、診断するのが少し難しいです。
-- 編集 2 --- もう 1 つの可能なオプション (ただし、より多くの労力を必要とするオプション) は、NProfを使用し、ソースを微調整して GUI を削除することですか?
AQTimeは、64 ビット OS 上のコマンド ライン アプリケーションを非常によくサポートします。
- - 編集 - -
AQTime は、コマンド ライン API もサポートしています。プロジェクト、プロファイルを起動し、自動的に終了するオプションがあります。すべての基準を満たし、マネージド + ネイティブ コードベースをサポートすると思います。
コマンドラインの AQTime ヘルプから:
「ご覧のとおり、コマンドライン引数を使用して、AQtime を起動し、プロジェクトをロードし、プロファイリングを開始し、プロファイリングが終了したら AQtime を閉じることができます。これらすべてにより、アプリケーションの自動テストに AQtime を統合することができます。実行中たとえば、アプリケーションをビルドするたびにこれらのテストを行うと、アプリケーションのコードへの変更がパフォーマンスのボトルネックやメモリの非効率的な使用を引き起こしているかどうかを簡単に確認できます。」