[c#] いくつかの良い.NETプロファイラは何ですか?



14 Answers

他のものはパフォーマンスプロファイリングをカバーしていますが、メモリプロファイリングに関してはScitech .NET Memory Profiler 3.1とANTS Memory Profiler 5.1(現在のバージョンは2009年9月現在)の両方を評価中です。 私はJetBrainsを1〜2年前に試しましたが、ANTS(メモリプロファイリング用)ほど良くなかったので、今回は気にしませんでした。 Webサイトを読むことから、他の2つと同じメモリプロファイリング機能がないように見えます。

ANTSとScitechの両方のメモリプロファイラには、他のものとは異なる機能がありますので、あなたの好みに応じて最適です。 一般に、Scitechのものはより詳細な情報を提供しますが、ANTSのものは実際に漏れているオブジェクトを識別するのに信じられません。 全体的に、ANTSの方が好きです。なぜなら、漏れの可能性を突き止めるのにとても素早いからです。

ここに私の経験から得たそれぞれの長所と短所があります:

ANTSとScitech .NETメモリプロファイラの共通機能

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

ANTS

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

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

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

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

Question

.netプログラムで作業するときに使用したプロファイラは何ですか?特にお勧めしたいものはどれですか?




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







[ 完全な開示 ]

ここにリストされている他の.NETメモリプロファイラーのフル機能はまだありませんが、市場にはJustTraceという新しいエントリがあります。 これはTelerikによって作成されたもので、すべての種類のアプリケーション(Web / Silverlight /デスクトップ)でトレース/プロファイリングを簡単かつ迅速に行うことを第一の目標としています。

他のツールでプロファイリングや最適化を脅かす、または遅らせることが見つかった場合は、 JustTrace一見する価値があります。




ASP.NET MVCを使用している場合は、MVCMiniProfiler(http://benjii.me/2011/07/using-the-mvc-mini-profiler-withentent-framework/)




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




私はWinFormsとConsole Apps(まだASP.netでテストされていない)用のJetBrains dotTraceで作業していましたが、これはかなりうまくいきます:

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




私はthisを使用して大きなC#アプリで多くの問題を発見しました。

通常、この問題は、プラグインのロード中に起動またはシャットダウン中に発生し、大きなデータ構造が作成、破棄、シリアライズ、またはデシリアライズされています。 しばしばそれらは作成され、複数回初期化され、変更ハンドラが複数回追加され、さらに問題が複雑化します。

このような場合、有害なメソッド/関数/プロパティ呼び出しサイトを突き止めるには2つのサンプルで十分です。







私は過去にRedGateのプロファイラと協力してきました。 私のために仕事をしました。




私は、 メモリとパフォーマンスのトレースセッションを区別するためのdotTraceの能力は絶対に貴重であると付け加えます (ANTSはメモリ差分機能も持つかもしれませんが、パフォーマンスの違いは見られませんでした)。

バグの修正や強化の前後でプロファイリングセッションを実行できるので、結果は非常に貴重です(特に私の場合のように、パフォーマンスは最優先事項ではなく、ボトルネックを見つけることができます)。非常に面倒です。 前後の差分を実行すると、 各メソッドのコール数変化と各メソッドの継続時間変化を確認できます。

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

結論:dotTraceはうまく機能し、diffは非常に重要です。







JetBrains dotTrace Profilerが.NET用の優れたプロファイリングツールであり、ASP.NETモードが品質であることがわかりました。




私は、Visual Studio Team Systemに付属のプロファイラが最高のプロファイラだとは思っていませんが、私は多くの機会にそれが十分に良いと感じました。 VSが提供するものを超えて具体的に何が必要ですか?

編集:残念ながらそれはVSチームシステムでのみ利用可能ですが、あなたがチェックアウトする価値があることにアクセスしている場合。




SpeedTraceは、アプリケーション内のボトルネックを見つけるのに役立つだけでなく、市場で最も優れたツールです。 また、シナリオのトラブルシューティングで、アプリケーションがクラッシュした理由、セットアップがインストールされなかった、アプリケーションがハングアップした、データ入力に応じてアプリケーションのパフォーマンスが低下することがあります。






Related