dotTraceは、Visual Studio / JetBrains Riderから直接起動できる .NETアプリケーションのパフォーマンスプロファイラで、パフォーマンスのボトルネックを検出し分析できる素晴らしいツールです。 詳細については以下を読み進めてください。
dotTraceは、デスクトップアプリケーション、.NET Core、IISまたはIIS Express WebサーバーでホストされるASP.NETアプリケーション、MonoアプリケーションとUnityアプリケーション、WCFサービス、Windowsサービス、Universal Windows Platformアプリケーション、およびユニットテストなど、さまざまな.NETアプリケーションのパフォーマンスボトルネックを特定するのに役立ちます。
dotTrace では、サポート対象バージョンの .NET Framework、.NET Core、.NET、Mono 5.10 以降、および Unity 2018.3 以降に基づいてアプリケーションをプロファイリングできます。
メソッド呼び出しの実行時間しか測定できない「古典的な」パフォーマンスプロファイリングとは異なり、timelineプロファイリングでは、呼び出しがどのように時間分布しているかが分かります。
メソッド呼び出しデータをタイムラインにバインドすることで、このプロファイルモードでは単に最も遅いメソッドを検出するだけでなく、イベントの順序にかかわるパフォーマンス問題 、例えばUIのフリーズ、過度のガベージコレクション、ワークロードの偏り、非効率的なファイルI/Oなどを診断できます。
ただし、dotTraceでは従来のプロファイルモードも使用できます。 Samplingプロファイリングは、アプリケーション全体のパフォーマンスを評価する最も簡単な方法ですが、tracing及びline-by-lineプロファイリングモードは、特定のアルゴリズムが内部でどのように動作するかの詳細が必要な場合に最適です。
フィルタ、呼び出しツリー、または図を使用して、プロファイルデータを細分化できます。 フィルタを適用すると、特定の条件で指定された時間間隔のセットが得られます。 この機能は、必要なデータを正確に取得するためにデータベースでクエリを実行するのと非常によく似ています。
たとえば、UIのフリーズがガベージコレクションのブロックによって発生したかどうかを調べるには、UIのフリーズが発生してGCのブロックが実行されたメインスレッド上のすべての時間間隔を選択するようにdotTraceに指示できます。 複雑に聞こえるかもしれませんが、このフィルタの組み合わせは実際には2回のクリックで切り替えられます。
dotTrace が Visual Studio と統合されているため、IDE から離れることなく現在作業中のアプリケーションのプロファイリングを開始できます。 Rider で dotTrace プラグインを使用すると、期間を指定したパフォーマンスのプロファイリング、static メソッド、ユニットテスト、実行中のプロセス、リモートアプリケーションなどのプロファイリングを実行できます。
Visual Studio と JetBrains Rider との統合によって IDE とプロファイラーの切り替え操作を不要にしているため、ほぼシームレスなプロファイリング操作が可能です。
dotTraceでは、非同期コードを簡単に分析できます。すべてのasync
呼び出し部分はすべて一箇所に表示されるため、さまざまなコールスタックを検索する必要はありません。
dotTraceを使用すると、コード内の静的メソッドをすぐにプロファイリングできます。 メソッドにキャレットを置き、Alt+Enterキーを押してアクションリストでDebug | Profileを選択します。
この機能で何ができるかをご想像ください。 コードを書いた直後から、そのコードの任意の部分でプロファイリングすることができるのです! ソリューションをビルドしたり、プロファイラで実行したり、新しいコードを実行するシナリオを設定したりする必要はありません。
ほとんどの場合、ローカルで実行しているアプリケーションをプロファイリングする必要があります。 しかし、リモートWebサーバーでアプリケーションの遅延に直面した場合はどうすればよいでしょうか。
dotTraceは、リモートマシンに接続して、スタンドアロンアプリケーション、Webアプリケーション、またはWindowsサービスをプロファイリングできます。 そこにdotTraceをインストールする必要はありません。単にいくつかのファイルをコピーするだけで結構です。
dotTraceは、実行中のアプリケーションにプロファイリングのために接続したり、プロファイリングデータ取得後に切り離したりできます。
これにより、プロファイラでアプリケーションを実行することによるオーバーヘッドを最小限に抑えることができます。 さらに重要なのは、プロファイリングが必要になるたびにアプリケーションを再起動することができない、本番環境におけるパフォーマンスの問題を調査できることです。
Visual Studio + ReSharper*バンドルまたはJetBrains Rider**をお持ちの場合は、コードエディタまたはユニットテストランナーから簡単にユニットテストのプロファイリングを開始できます。
* ReSharperをインストールしていなくても、NUnitやMSTest、xUnitで提供されているネイティブのユニットテストランナーをプロファイリングすることは可能です。
** プロファイリング機能は、dotUltimate または All Products Pack ライセンス所有者のみに提供されています。
タイムラインプロファイリングのスナップショットを分析するときに、Webアプリケーションが受信HTTP要求を処理している時間間隔を除外することができます。 正確なデータを取得し、正確な根本原因を特定し、実行速度の遅いメソッドに照準を合わせてください。 タイムラインプロファイリングを使用して、Webアプリケーションを高速化してください。
タイムラインプロファイリングを使用して、各クエリーがアプリケーションのパフォーマンスに与える影響を分析してください。 SQL Queriesフィルタでは、すべてのSQLクエリおよびSQLコネクションがパフォーマンス統計とともに表示されます。
必要に応じて、クエリの内容を別のウィンドウで開いてさらに分析することができます。 1つまたは複数のクエリーを選択し、それらが実行されたメソッドを調査することで、すべてのデータをフィルタできます。
効果のないSQLクエリはもうありません!
Profiling SDKを使用すると、プログラムによるプロファイリングデータの収集開始・停止、収集したスナップショットの保存など、コードからプロファイリングセッションを制御できます。
これにより、2つの有用な使用シナリオが可能になります。 まず、SDKを使用してプロファイリングの範囲を絞り込み、コードのどの部分をプロファイリングするかを選択します。 次の使用シナリオは、自己プロファイリング・アプリケーションです。具体的には、アプリケーションがエンドユーザーのマシン上でどのように動作しているかを示す統計情報を収集することができます。
dotTrace には、継続的インテグレーションのビルドをプロファイリングする場合に必要不可欠な、プロファイリングスナップショットの収集を自動化するコマンドラインのプロファイリングツールが付属しています。
JetBrainsのTeamCityをCIサーバーとして使用している場合は、TeamCityのdotTraceプラグインをインストールするようにしてください。 このプラグインを使用すると、統合テストをプロファイリングしてアプリケーションのパフォーマンス劣化を防ぐことができます。 テスト実行時間のしきい値を設定しておけば、そのしきい値を超過した場合、プラグインが自動的にパフォーマンスのスナップショットを取得し、テストを不合格にします。
実行時間の長い関数を長時間かけて最適化した後、最適化が有効に働くかどうかを確認するため、場合によっては開発者が最初からプロファイリングを実施する必要があります。
dotTraceではこのような問題はありません。 プロファイラは、設定した時間調整に基づいて、スナップショット内のすべての関数のタイミングを即座に再計算することができます。アプリケーションの再プロファイリングを行う必要はありません。 1つの関数や、あるクラスのすべての関数の実行時間を設定するだけで、「この関数を40%最適化するとどうなるか?」をプロファイラに尋ねることができます。 スナップショット全体の実行時間は再計算されます。
dotTrace は、1つのアプリケーションの2つのパフォーマンススナップショット同士を比較することができます。 各関数の呼び出し回数と実行時間の差を示す比較スナップショットが生成されます。 比較スナップショットは、通常のパフォーマンススナップショットと同じ方法で表示や分析ができます。
無料 30 日間体験版をご利用可能です