.net プログラムで作業するときにどのプロファイラーを使用しましたか? また、特に推奨するのはどれですか?
30 に答える
私はJetBrainsdotTraceとRedgateANTSを幅広く使用しました。それらは機能と価格がかなり似ています。どちらも、便利なパフォーマンスプロファイリングと非常に基本的なメモリプロファイリングを提供します。
dotTraceはResharperと統合されています。これは、IDEからワンクリックで単体テストのパフォーマンスをプロファイリングできるため、非常に便利です。ただし、dotTraceは多くの場合、誤った結果をもたらすようです(たとえば、メソッドの実行に数年かかったと言っています)
私はANTSがプロファイリング結果を提示する方法を好みます。ソースコードが表示され、各行の左側に実行にかかった時間が表示されます。dotTraceにはツリービューがあります。
EQATECプロファイラーは非常に基本的であり、EQATECプロファイラーで実行できるアセンブリの特別なインストルメント化バージョンをコンパイルする必要があります。ただし、無料です。
全体的に、パフォーマンスプロファイリングにはANTSを好みますが、Resharperを使用する場合、dotTraceの統合はキラー機能であり、使いやすさにおいてANTSよりも優れていることを意味します。
無料のMicrosoftCLRProfiler(.Net Framework 2.0 / .Net Framework 4.0)は、.NETメモリプロファイリングに必要なすべてです。
2011年の更新:
Scitechメモリプロファイラーは非常に基本的なUIを備えていますが、dotTraceやANTSに欠けているアンマネージメモリに関する情報など、多くの有用な情報があります。COM相互運用を行っている場合に役立つかもしれませんが、COMを作成するプロファイラーはまだ見つかりません。診断が容易なメモリの問題-通常は解決する必要がありますwindbg.exe
。
ANTSプロファイラーはここ数年で飛躍的に進歩しました。そのメモリプロファイラーにはいくつかの本当に便利な機能があり、私の見積もりではパッケージとしてdotTraceよりも進んでいます。幸運にも両方のライセンスを持っていますが、パフォーマンスとメモリの両方のために.Netプロファイラーを1つ購入する場合は、ANTSにします。
他の人はパフォーマンス プロファイリングをカバーしていますが、メモリ プロファイリングに関しては、 現在 Scitech .NET Memory Profiler 3.1 と ANTS Memory Profiler 5.1 (2009 年 9 月現在の最新バージョン) の両方を評価しています。1、2 年前に JetBrains を試してみましたが、ANTS (メモリ プロファイリング用) ほど良くなかったので、今回は気にしませんでした。Web サイトを読むと、他の 2 つと同じメモリ プロファイリング機能がないように見えます。
ANTS と Scitech メモリ プロファイラの両方には、もう一方にはない機能があるため、どちらが最適かは好みによって異なります。一般的に言えば、Scitech はより詳細な情報を提供しますが、ANTS は漏れているオブジェクトを特定するのに非常に優れています。全体として、可能性のあるリークを非常に迅速に特定できるANTSの方が好きです.
私の経験からの主な長所と短所は次のとおりです。
ANTS と Scitech .NET メモリ プロファイラーの共通機能
- リアルタイム分析機能
- Web サイトの優れたハウツー ビデオ
- 使いやすい
- 適度なパフォーマンス (プロファイラーが接続されていない場合よりも明らかに遅いですが、イライラするほどではありません)
- 漏れているオブジェクトのインスタンスを表示する
- 基本的にどちらもよくやってくれます
アリ
- ワンクリック フィルターを使用して、イベント ハンドラーによってのみ存続しているオブジェクト、破棄されているが存続しているオブジェクト、破棄されたオブジェクトからの参照によってのみ存続しているオブジェクトなど、一般的なリークを見つけます。これはおそらく ANTS のキラー機能です。このため、リークの検出は非常に高速です。私の経験では、リークの大部分はイベント ハンドラーがアンフックされていないことが原因であり、ANTS はこれらのオブジェクトに直接移動します。素晴らしい。
- オブジェクト保持グラフ。同じ情報が Scitech で利用可能ですが、ANTS で解釈する方がはるかに簡単です。
- オブジェクト自体のサイズに加えて、子のサイズを表示します (ただし、全体的なクラス リストではなく、残念ながらインスタンスが選択されている場合のみ)。
- Visual Studio との統合の改善 (グラフを右クリックしてファイルにジャンプ)
Scitech .NET メモリ プロファイラ
- オブジェクトが割り当てられたときのスタック トレースを表示します。これは、多くの異なる場所に割り当てられているオブジェクトに非常に役立ちます。ANTS では、リークされたオブジェクトが作成された場所を正確に特定することは困難です。
- 破棄されなかった使い捨てオブジェクトの数を示します。リークを示すものではありませんが、ガベージ コレクションの高速化の結果として、この問題を修正し、アプリケーションのパフォーマンスを向上させる機会を特定します。
- より詳細なフィルタリング オプション (複数の列を個別にフィルタリングできます)。
- 作成されたオブジェクトの総数 (収集されたガベージを含む) に関する情報を表示します。ANTS は、「ライブ」オブジェクトの統計のみを表示します。これにより、アプリケーション全体のパフォーマンスの分析と調整が容易になります (たとえば、多くのオブジェクトが不必要に作成されていて、必ずしもリークしていない場所を特定します)。
要約すると、ANTS は何がリークしているのかをより速く見つけるのに役立つと思いますが、Scitech はアプリケーション全体のメモリ パフォーマンスと個々のオブジェクトについてもう少し詳しく説明します。破棄されていない使い捨てオブジェクトのスタック トレースと追跡が ANTS に追加された場合、他のものを使用する必要はないと思います。
最近、EQATEC Profiler http://www.eqatec.com/tools/profilerを発見しました。ほとんどの .NET バージョンと多数のプラットフォームで動作します。使い方は簡単で、商用利用でも一部は無料です。
nProfを忘れないでください。これは、非常に優れたフリーウェアのプロファイラーです。
ANTS プロファイラー. 私は多くを使用していませんが、ANTS について不満はありません。視覚化は本当に役に立ちます。
すばやく、簡単で、無料の何かを探しているなら、http://code.google.com/p/slimtune/はうまくいくようです。
AutomatedQA AQTimeはタイミング用、SciTech MemProfilerはメモリ用です。
私は、WinForms および Console Apps (まだ ASP.net でテストされていません) 用にJetBrains dotTraceを使用してきましたが、非常にうまく機能します。
彼らは最近、法人ライセンスよりも大幅に安い「個人ライセンス」も追加しました。それでも、他の誰かがもっと安いものや無料のものを知っているなら、私も聞きたいです:-)
素晴らしいscitech.netメモリプロファイラーを忘れないでください
.netアプリのメモリが不足している理由を追跡するのに最適です。
メモリとパフォーマンスのトレース セッションを比較する dotTrace の機能は非常に貴重です (ANTS にもメモリ比較機能があるかもしれませんが、パフォーマンスの比較は見られませんでした)。
バグ修正や機能強化の前後にプロファイリング セッションを実行して結果を比較できることは、非常に価値があります。特に、巨大なレガシー .NET アプリケーション (私の場合のように) ではパフォーマンスが最優先事項ではなく、ボトルネックの発見が必要になる可能性があります。非常に退屈です。前後の diff を実行すると、各メソッドの呼び出し回数の変化と各メソッドの期間の変化を確認できます。
これは、コードの変更時だけでなく、たとえばクライアント/顧客ごとに異なるデータベースを使用するアプリケーションがある場合にも役立ちます。1 人の顧客が速度の遅さを訴える場合、そのデータベースを使用してプロファイリング セッションを実行し、その結果を「高速」データベースと比較して、どの操作が速度低下の原因であるかを判断できます。もちろん、データベース側のパフォーマンス ツールは多数ありますが、アプリケーション側からパフォーマンス メトリックを確認するのに役立つ場合があります (ユーザーが実際に見ているものに近いため)。
結論: dotTrace はうまく機能し、差分は非常に貴重です。
AQTimeは合理的ですが、少し学習曲線があり、Team Suite に組み込まれているものほど使いやすくはありません
SharpDevelop(3.1.1)の現在のリリースには、優れた統合プロファイラーがあります。これは非常に高速であり、SharpDevelop IDE とその NUnit ランナーに非常によく統合されています。結果は柔軟なツリー/リスト スタイルで表示されます (LINQ を使用して独自の選択を作成します)。表示されたメソッドをダブルクリックすると、ソース コードに直接ジャンプします。
以前は、 Visual Studio Team Systemに同梱されているプロファイラーを使用していました。
The latest version of ANTS memory profiler (I think it's 5) simply rocks!!! I was haunting a leak using WinDbg and SOS since it proved to be the best way before, then I tried ANTS and I got it in minutes. Really a wonderful piece of software.
過去に RedGate のプロファイラーを使用したことがあります。私のために仕事をしました。
自分で試したことはありませんが、おそらくdotTraceですか?彼らの ReSharper アプリケーションは確かに優れたものです。多分dotTraceもです:)
Visual Studio Team System に付属しているプロファイラーが最適なプロファイラーであるとは思えませんが、多くの場合、それで十分であることがわかりました。VS が提供するもの以外に具体的に何が必要ですか?
編集: 残念ながら、VS Team System でのみ利用できますが、アクセスできる場合はチェックアウトする価値があります。
yourkit Java と .net プロファイラーを追加したいと思います。Java が大好きですが、.NET バージョンはまだ試していません。
残念ながら、私が試したプロファイラーのほとんどは、末尾呼び出し、特にANTSで使用すると失敗しました。私は自分で書くことになります。ベースとして使用できるCodeProjectの簡単な実装があります。
Intel® VTune™ Performance Analyzer for quick sampling
以前使用した素晴らしいツールを紹介する必要があります。AVICode インターセプター スタジオ. 私の以前の会社では、この素晴らしいツールを使用して Web アプリケーションのプロファイリングを行いました (これは、世界最大の単一の Web アプリケーションであり、これまでに行われた最大の民間 IT プロジェクトであると考えられています)。パフォーマンス チームは、この素晴らしいツールの助けを借りて驚異的な成果を上げました。構成するのは面倒ですが、それは 1 回限りの作業であり、時間をかける価値があると言えます。詳細はこちらのページをご覧ください。
ありがとう、ジェームズ
私にとって SpeedTrace は、アプリケーション内のボトルネックを見つけるのに役立つだけではないため、市場で最高のツールです。また、シナリオのトラブルシューティングで、アプリケーションがクラッシュした理由、セットアップがインストールされなかった理由、アプリケーションがハングアップした理由、データ入力によってはアプリケーションのパフォーマンスが低下する場合がある理由 (遅い db トランザクションを特定する場合など) を見つけるのにも役立ちます。
私は最近、Telerik の JustTrace をテストしてきました。完成品には程遠いですが、彼らは正しい方向に進んでいます。
NuMega True Time プロファイラーは、Micro Focus の DevPartner Studio に組み込まれています。PDB のみを必要とし、ソースを必要としない .NET アプリの行およびメソッド レベルの詳細を提供します (ただし、役立ちます)。独自のスレッドごとのカーネル モード タイミング ドライバーを使用して、アルゴリズム的に重いルーチンと長い I/O 待機を伴うルーチンを区別できます。バージョン 10.5 は、2011 年 2 月 4 日に新しい 64 プロセスのサポートとともに出荷されます。10.5 リリースのニュースについては、http: //www.DevPartner.com でフォローアップしてください。
免責事項: 私は Micro Focus の DevPartner のプロダクト マネージャーです。
ライセンスが問題になる場合は、メモリ プロファイリングに WINDBG を試すことができます。
ASP.NET MVC を使用している場合は、MVCMiniProfiler (http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/) を試すことができます。
thisを使用する大きな C# アプリで多くの問題を発見しました。
通常、この問題は、プラグインがロードされ、ビッグ データ構造が作成、破棄、シリアライズ、またはデシリアライズされるときに、起動またはシャットダウン中に発生します。多くの場合、それらは複数回作成および初期化され、変更ハンドラーが複数回追加されるため、問題がさらに複雑になります。
このような場合、プログラムは非常に遅くなる可能性があり、問題のあるメソッド/関数/プロパティ呼び出しサイトを特定するには 2 つのサンプルだけで十分です。
私の会社で .NET 用の YourKit Profiler を選択したのは、それが最高の価値 (価格対機能) だったからです。柔軟なライセンス (フローティング ライセンス) を取得したい小さな会社にとって、ANTS は完璧な選択でした。
また、dotTrace では不可能だった、実行中のプロセスにアタッチする機能も提供してくれました。ただし、すべての .NET の速度が低下するため、接続は最適なオプションではないことに注意してください。ただし、これは、他のプロセスによって開始された .NET アプリケーションをプロファイリングする唯一の方法でした。機能的には、ANTS と dotTrace の方が優れていましたが、最終的には YourKit で十分でした。