優れた.NETプロファイラーとは何ですか?


374

.netプログラムを使用するときにどのプロファイラーを使用しましたか。特にどのプロファイラーをお勧めしますか?

回答:


285

私はJetBrains dotTraceRedgate ANTSを幅広く使用しています。機能と価格はかなり似ています。どちらも、有用なパフォーマンスプロファイリングと非常に基本的なメモリプロファイリングを提供します。

dotTraceはResharperと統合されています。これは、IDEからワンクリックでユニットテストのパフォーマンスをプロファイルできるため、非常に便利です。ただし、dotTraceはしばしば誤った結果を与えるようです(たとえば、メソッドの実行に数年かかったなど)

ANTSがプロファイリング結果を表示する方法を好みます。ソースコードが表示され、各行の左側に、実行にかかった時間が表示されます。dotTraceにはツリービューがあります。

EQATECプロファイラーは非常に基本的であり、EQATECプロファイラーで実行できるアセンブリの特別なインストルメント済みバージョンをコンパイルする必要があります。ただし、無料です。

全体的には、パフォーマンスプロファイリングにはANTSを好みますが、Resharperを使用する場合、dotTraceの統合はキラー機能であり、使いやすさでANTSを上回っています。

無料のMicrosoft CLRプロファイラー(.Net Framework 2.0 / .Net Framework 4.0)は、.NETメモリプロファイリングに必要なすべてです。

2011年の更新:

Scitechメモリプロファイラを使用すると、COM相互運用を行っている場合は、それが役に立つかもしれませんが、私はCOMを作る任意のプロファイラを見つけるには至っていない-ドットトレースとANTSが欠けているアンマネージメモリ上でいくつかの情報を含む、非常に基本的なUIが、有用な情報の多くを、持っています診断が容易なメモリの問題-通常は解決する必要がありますwindbg.exe

ANTSプロファイラーは過去数年で飛躍的に進歩し、そのメモリープロファイラーには本当に便利な機能がいくつかあり、私の見積もりでは、これをdotTraceよりも先に進めています。私は幸運にも両方のライセンスを持っていますが、パフォーマンスとメモリの両方のために1つの.Netプロファイラーを購入する場合は、ANTSにしてください。


5
Visual Studioのプロファイラーも非常に使いやすく、Visual Studio 2010はベータ版であるため、無料です。2010年には、競合と並行性を表示するための複数の拡張が行われました。試してみてください
Rick

15
@リック残念ながら、Visual StudioのプロファイラーはProfessional Editionには存在しません...
Drake

CLRプロファイラーが.NETのメモリプロファイリングに必要なすべてであるということには、私は強く反対しますが、時間に価値を置かない場合は事実です。メモリプロファイラの最良のカップルの概要については、以下の私の回答を参照してください。これら、メモリリークと潜在的な問題をより迅速に発見するのに役立ちます。
ベンロビンス

1
EQUATECプロファイラーの現在のリリースは無料ではなくなりました。
デビッドシュミット2010

1
EQATECプロファイラーが.NET(完全なフレームワーク)で再び無料になったようです
soren.enemaerke 2010

88

他の人はパフォーマンスプロファイリングを取り上げましたが、メモリプロファイリングに関しては、 現在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メモリプロファイラーの共通機能

  • リアルタイム分析機能
  • 彼らのウェブサイト上の優れたハウツービデオ
  • 使いやすい
  • 適切なパフォーマンス(プロファイラーが接続されていない場合より明らかに遅いが、それほどイライラしない)
  • リークしているオブジェクトのインスタンスを表示する
  • 基本的に彼らは両方ともかなりよく仕事をします

アンツ

  • ワンクリックフィルターで、イベントハンドラーによってのみ存続しているオブジェクト、破棄されているがまだ生存しているオブジェクト、破棄されたオブジェクトからの参照によってのみ存続しているオブジェクトを含む、一般的なリーク見つけます。これはおそらくANTSのキラー機能です-このため、リークの発見は非常に高速です。私の経験では、リークの大部分はイベントハンドラーのフックが解除されていないことが原因であり、ANTSはこれらのオブジェクトに直接移動します。驚くばかり。
  • オブジェクト保持グラフ。Scitechでも同じ情報を利用できますが、ANTSで解釈する方がはるかに簡単です。
  • オブジェクト自体のサイズに加えて、子のサイズも表示します(ただし、クラスリスト全体ではなく、インスタンスが選択された場合のみ)。
  • Visual Studioへの統合の向上(グラフを右クリックしてファイルにジャンプ)

Scitech .NETメモリプロファイラー

  • オブジェクトが割り当てられたときにスタックトレースを表示します。これは、さまざまな場所に割り当てられているオブジェクトに非常に役立ちます。ANTSでは、リークされたオブジェクトが作成された場所を正確に特定することは困難です。
  • 廃棄されなかった使い捨てオブジェクトの数を示します。リークを示しているわけではありませんが、この問題を修正し、ガベージコレクションの高速化の結果としてアプリケーションのパフォーマンスを向上させる機会を特定します。
  • より詳細なフィルタリングオプション(複数の列を個別にフィルタリングできます)。
  • 作成されたオブジェクト(収集されたガベージを含む)の総数に関する情報を表示します。ANTSは「ライブ」オブジェクト統計のみを表示します。これにより、全体的なアプリケーションパフォーマンスの分析と調整が容易になります(たとえば、不必要に多くのオブジェクトが作成され、必ずしもリークしているとは限らない場所を特定します)。

要約すると、ANTSは何がより速くリークしているのかを見つけるのに役立ち、Scitechは全体のアプリケーションメモリパフォーマンスと個々のオブジェクトについて、何を見ればよいのか(たとえば、作成時のスタックトレース)がわかると詳細を提供します。スタックトレースと処分されていない使い捨てオブジェクトの追跡がANTSに追加された場合、他に何も使用する必要はありません。


.NET Memory Profilerの4.0バージョン(現在プレビュー中)にグラフビューが追加されました。これは、Scitechにはない(3.1 / 3.5で)ANTSプロファイラーで気に入った機能の1つでした。
cplotts 2011

45

EQATECプロファイラーhttp://www.eqatec.com/tools/profilerを最近発見しました。ほとんどの.NETバージョンで動作し、多数のプラットフォームで動作します。それは使いやすく、その一部は商用目的でも無料です。


末尾再帰すぎ:(報告されたバグに失敗。
leppie

これは非営利目的でのみ無料です。
Jon Seigel、2010年

7
TrolleFarが回答を書いた2008年8月には、完全に無料でした。今、ジョンが言うように、それは非営利目的でのみ無料です。
Richard Flamsholt 2010年

8
彼らは再びライセンス条項を変更したことが判明しました。その一部は再び商用利用のために無料です。
TrolleFar 2010

FEB2011現在、セルフ/コマーシャルの通常の.NETエディションは無料です。このツールは、クライアント/サーバーモデルで動作し、繰り返される境界をプロファイル/バイパスできるため、優れています(たとえば、Native-> COM-> NET-> COM-> NETをプロファイルできます)。ただし、UIはかなりひどいです:-)

31

[ 完全開示 ]

ここにリストされている他のいくつかの.NETメモリプロファイラーほど完全には機能していませんが、市場にはJustTraceという新しいエントリがあります。これはTelerikによって作成され、主な目標は、すべての種類のアプリ(web / Silverlight / desktop)でトレース/プロファイリングをより簡単かつ迅速に行えるようにすることです。

プロファイリングと最適化が他のツールに威圧的または遅いと感じたことがある場合、JustTraceは一見の価値があります。


12
ダウンロードして試してみると、Telerikは「登録」と「アカウントの作成」を求めています。そして、これらすべてのニュースレター購読ボタンはデフォルトでチェックされています。JustTraceを試してみたいと思っていますが、Telerikがこれを難しくしているのではないでしょうか。
Ryan Lundy

1
挑戦してくれてありがとう、キラレッサ。プロセスを改善できることはわかっています。現在、その作業を行っています。これらのハードルをすぐに解消したいと考えています。とりあえず、ボックスのチェックを外すだけで、2分でアカウントと無料のJustTraceダウンロードが可能になります。短期間のトラブルでごめんなさい。-T
Todd

9
ポストバックして、アカウントを作成せずにダウンロードできる場合はお知らせください。試してみるつもりです。
ライアンランディ

4
更新:今日は、アカウントを作成しなくても、回答のリンクを使用してダウンロードできました。
Ryan Lundy

25

nProf-完全に優れたフリーウェアプロファイラー-を忘れないでください。


3
放棄されたように見えます... 2006年からのアルファリリースのみ:-(
Mauricio Scheffer

2
私にとってはうまくいきました。現在はGoogle Codeプロジェクトになっています。2009
。– User1

19
nProfページには次のように記載されています。NProfはもはや積極的に開発されていません。オープンソースの.NETプロファイラーを探している場合は、SlimTune(code.google.com/p/slimtune)をご覧ください
Richard Ev





9

私はJetBrains dotTrace for WinFormsとConsole Apps(ASP.netではまだテストされていません)を使用してきましたが、非常にうまく機能します。

彼らは最近、法人のライセンスよりも大幅に安い「個人ライセンス」も追加しました。それでも、他の誰かが安いまたは無料のものさえ知っているなら、私も聞きたいです:-)


7

素晴らしいscitech .netメモリプロファイラーをお忘れなく

.netアプリのメモリが不足している理由を追跡するのに最適です。


1
とても素敵なツールです。使いやすく、オブジェクトグラフ内を移動できます。私は特別に「リアルタイム」のメモリ追跡が好きです。これは、アプリケーションの実行中にオブジェクト数がどのように発生するかを示しています。
ローグライダー2009年

5

メモリとパフォーマンストレースセッションを比較するdotTraceの機能は非常に貴重です(ANTSにもメモリ比較機能があるかもしれませんが、パフォーマンスの比較はありませんでした)。

バグ修正または機能強化の前後にプロファイリングセッションを実行できるため、結果を比較することは非常に貴重です。特に、パフォーマンスが優先されることがなく、ボトルネックを見つけることができない場合は、(私の場合のように)巨大なレガシー。とても退屈です。before-after-diffを実行すると、各メソッドの呼び出し回数変化と各メソッドの継続時間変化を確認できます。

これは、コードの変更時だけでなく、たとえばクライアント/顧客ごとに異なるデータベースを使用するアプリケーションがある場合にも役立ちます。ある顧客が速度の低下について不平を言った場合、そのデータベースを使用してプロファイリングセッションを実行し、結果を「高速」データベースと比較して、速度低下の原因となっている操作を特定できます。もちろん、データベース側のパフォーマンスツールはたくさんありますが、アプリケーション側からパフォーマンスメトリックを確認するのに役立つ場合があります(ユーザーが実際に見ているものに近いため)。

結論:dotTraceは非常に機能し、差分は非常に貴重です。




3

SharpDevelopの現在のリリース(3.1.1)には、優れた統合プロファイラーがあります。これは非常に高速で、SharpDevelop IDEとそのNUnitランナーに非常によく統合されています。結果は柔軟なツリー/リストスタイルで表示されます(LINQを使用して独自の選択を作成します)。表示されたメソッドをダブルクリックすると、ソースコードに直接ジャンプします。


2

過去にRedGateのプロファイラーを使用したことがあります。私のために仕事をしました。


2

私はそれを自分で試したことはありませんが、おそらくdotTraceですか?彼らのReSharperアプリケーションは確かに良いものです。多分dotTraceもそうです:)


1
私はdotTraceを使用しており、推奨できます。
ジョンスキート、

2

Visual Studio Team Systemに付属しているプロファイラーが最高のプロファイラーであるとは思えませんが、多くの場合それで十分であることがわかりました。具体的には、VSが提供するもの以外に何が必要ですか?

編集:残念ながら、それはVS Team Systemでのみ利用できますが、アクセスできる場合は、チェックする価値があります。


1
私はVS2008の1つについて話していましたが、すべてのバージョンで使用できるとは限りません(私はVSTSを使用しています)。PDC2008ビデオから、VS2010ではプロファイラーが大幅に改善されるようです。
ブライアンラスムッセン

1
そのプロファイラーは、Visual StudioのTeam Systemsバージョンでのみ使用できます。
Chris Brandsma

Visual Studio Team System(Developer Edition)にはプロファイラーがあります。< microsoft.com/visualstudio/en-us/products/teamsystem/… >を参照してください。
gix 2009年

Visual Studioには、VS 2005以降のプロファイラーがあります。これは、チームシステムでのみ使用できます。それが、実際、私がチームシステムを使用している理由です(仕事で私はプロがいます)。私の意見では、これは非常に優れたプロファイラーです。
コンフィギュレー

これはすばらしいプロファイラーですが、ANTSの新しいバージョンの標準には完全には対応していません。
mqp 2009年

2

ANTSメモリプロファイラーの最新バージョン(5だと思います)は、本当に素晴らしいです!!! WinDbgとSOSを使用してリークを悩ませていましたが、それが以前に最良の方法であることが判明したため、ANTSを試したところ、数分で取得できました。本当に素晴らしいソフトウェアです。


2

yourkit Javaと.netプロファイラを追加したいのですが、Javaにはそれが大好きですが、.NETバージョンは試していません。


1

残念なことに、私が試したプロファイラーのほとんどは、末尾呼び出しで使用すると失敗しました。自分で書いてしまうだけです。CodeProjectには、ベースとして使用できる簡単な実装があります。



1

私がいつか使用した素晴らしいツールをあなたの通知に持っていかなければなりません。AVICode Interceptor Studio。私の以前の会社では、この素晴らしいツールを使用してWebアプリケーションのプロファイルを作成しました(これは、世界で単一の最大のWebアプリケーションであり、これまでに行われた最大の民間ITプロジェクトであると想定されています)。パフォーマンスチームは、この素晴らしいツールの助けを借りて不思議に思いました。設定するのは面倒ですが、それは一度限りのアクティビティであり、時間の価値があると思います。チェックアウトこのページを詳細については。

ありがとう、ジェームズ


1

私にとってSpeedTraceは、アプリケーション内のボトルネックを見つけるだけでなく、市場で最高のツールです。また、トラブルシューティングのシナリオで、アプリケーションがクラッシュした、セットアップがインストールされなかった、アプリケーションがハングアップした、データ入力によってはアプリケーションのパフォーマンスが低下している(例:遅いdbトランザクションを特定する)理由を見つけるのに役立ちます。


1

私は最近TelerikのJustTraceをテストしており、完成品からはかなり離れていますが、彼らは正しい方向に進んでいます。


1

ライセンスが問題である場合、メモリプロファイリングにWINDBGを試すことができます


1

NuMega True Timeプロファイラーは、Micro FocusによるDevPartner Studioにあります。PDBのみを必要とし、ソースは不要な.NETアプリの行とメソッドレベルの詳細を提供します(ただし、役立ちます)。独自のスレッドごとのカーネルモードタイミングドライバーを使用して、アルゴリズム的に重いルーチンと長いI / O待機のルーチンを区別できます。バージョン10.5は、2011年2月4日に新しい64プロセスサポートとともに出荷されます。恥知らずなプラグイン:DevPartner製品ラインで作業しています。10.5リリースのニュースについては、http: //www.DevPartner.comでフォローアップしてください

免責事項:私はMicro FocusのDevPartnerのプロダクトマネージャーです。


SOへようこそ。DevPartnerとの関係を開示する必要があります。そうしないと、スパマーと見なされ、そのように扱われます。多くのプロファイリングの質問に答えたと思います...
ジョンサンダース

0

これを使用している大きなC#アプリで多くの問題を見つけました。

通常、この問題は、プラグインが読み込まれ、ビッグデータ構造が作成、破棄、シリアル化、または非シリアル化されるため、起動またはシャットダウン中に発生します。多くの場合、それらは複数回作成および初期化され、変更ハンドラーが複数回追加され、問題がさらに悪化します。

このような場合、プログラムは非常に遅いため、有罪なメソッド、関数、プロパティの呼び出しサイトを特定するには、2つのサンプルで十分です。


0

私の会社ではYourKit Profilerを.NETに選択しました。これが最良の値(価格と機能)だったからです。柔軟なライセンス(フローティングライセンス)を必要とする中小企業にとって、これは完璧な選択でした。当時、ANTSは開発者向けのシートロケットでした。

また、dotTraceでは不可能であった実行中のプロセスにアタッチする機能も提供しました。すべての.NETの速度が低下するため、このアタッチは最適なオプションではありませんが、他のプロセスによって開始された.NETアプリケーションをプロファイルする唯一の方法でした。機能的には、ANTSとdotTraceの方が優れていましたが、最終的にはYourKitで十分でした。


YourKitは2012年1月から、YourKitプロファイラーの価格を引き上げました。したがって、価格優位性はもはや有効ではないかもしれません。

0

ASP.NET MVCを使用している場合は、MVCMiniProfilerを試すことができます(http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.