Xamarin Profiler

このガイドでは、Xamarin Profiler の主な機能について説明します。ここでは、プロファイラー、プロファイリング、使用する時期、および Xamarin アプリケーションをプロファイリングするための標準的なワークフローについて説明します。

アプリケーションの成功は、エンドユーザーエクスペリエンスによって異なります。 開発者はアプリに非常に優れた機能を実装しているかもしれませんが、アプリのクラッシュが遅い場合や、クラッシュが発生する場合は、ユーザーがそれを削除する可能性があります。

Mono は、mono の ログプロファイラーと呼ばれる mono ランタイムで実行されているプログラムに関する情報を収集するための強力なコマンドラインプロファイラーを備えています。 Xamarin Profiler Mono ログプロファイラー用のグラフィカルインターフェイスであり、Mac での Android、iOS、tvOS、および Mac アプリケーションのプロファイルと、Windows 上の Android、iOS、および tvOS アプリケーションのプロファイリングをサポートしています。

Xamarin Profiler には、プロファイリング (割り当て、サイクル、タイムプロファイラー) に使用できるさまざまな音色があります。 このガイドでは、これらの音色がどのように測定されるか、および各画面に表示されるデータの意味を明確にする方法について説明します。

このガイドでは、一般的なプロファイルシナリオについて説明し、iOS および Android アプリケーションの分析と最適化を支援するツールとしてプロファイラーを紹介します。

ダウンロードおよびインストールする

注意

Mac 上の Windows または Visual Studio for Mac でこの機能 Visual Studio Enterprise のロックを解除するには、 Visual Studio Enterpriseサブスクライバーである必要があります。

Xamarin Profiler はスタンドアロンアプリケーションであり、IDE 内からプロファイリングを有効にするために Visual Studio for Mac および Visual Studio と統合されています。

プラットフォームのインストールパッケージをダウンロードします。

ダウンロードが完了したら、インストーラーを起動して、システムに Xamarin Profiler を追加します。

プロファイラーとプロファイリング

プロファイリングは、アプリケーション開発の重要で見落とされることが多い手順です。 プロファイリングは、動的な プログラム分析 の一種であり、プログラムの実行中および使用中に分析されます。 プロファイラーは、時間の複雑さ、特定のメソッドの使用状況、および割り当てられているメモリに関する情報を収集するデータマイニングツールです。 プロファイラーを使用すると、これらのメトリックを掘り下げて分析し、コード内の問題の領域を特定できます。

アプリケーションを設計および開発する際には、事前に最適化しないことが重要です。つまり、アクセス頻度の低い領域でコードを開発するために時間を費やすことになります。 これはプロファイルの機能です。 プロファイラーは、コードベースの最も一般的に使用される部分に関する洞察を提供し、改善のために時間を費やす必要がある領域を特定するのに役立ちます。 開発者は、ほとんどの時間がアプリケーションで費やされている場所と、アプリケーションでメモリがどのように使用されるかを理解する必要があります。

プロファイリングはあらゆる種類の開発に役立ちますが、特にモバイル開発では非常に重要です。 最適化されていないコードは、デスクトップコンピューターよりもモバイルプラットフォームではさらに顕著になります。アプリの成功は、効率的に実行される美しいコードと最適化されたコードに依存します。

Xamarin Profiler

Xamarin Profiler は、開発者が Visual Studio for Mac または Visual Studio 内からアプリケーションをプロファイリングする方法を提供します。 プロファイラーは、アプリに関する情報を収集して表示します。これは、開発者がアプリケーションの動作を分析するために使用できます。 Xamarin Profiler でアプリケーションのプロファイリングを行うには、さまざまな方法があります。つまり、メモリプロファイルと統計サンプリングです。 これらはそれぞれ、割り当てと時間プロファイラーの音色を通じて実行されます。

現時点では、Xamarin Profiler を使用して、Mac 上の Xamarin アプリケーション (Visual Studio for Mac 経由) をテストできます。 プロファイラーは IDE とは別のプロセスであるため、Visual Studio for Mac から起動するだけでなく、それをスタンドアロンアプリケーションとして使用して、 .mlpd mono ログプロファイラーから生成された .exe とファイルを調べることもできます。

プロファイラーのサポート

Xamarin Profiler のサポートは、次のプラットフォームで使用できます。

  • Visual Studio for Mac (macOS、Enterprise ライセンス)

    • Android
      • デバイスと Emulator
    • iOS
      • デバイスとシミュレーター
    • tvOS (時刻のインストルメント化はサポートされていません)
      • デバイスとシミュレーター
    • Mac
  • Visual Studio ( Enterprise バージョンのみ)

    • Android
      • デバイスと Emulator
    • iOS [試験段階]
      • デバイスとシミュレーター
    • tvOS
      • デバイスとシミュレーター

デバッグ 構成のプロファイル のみ が可能であることに注意してください。

プロファイラーの基礎

このセクションでは、Xamarin Profiler の一部を紹介し、その機能について説明します。

アプリでのプロファイリングを許可する

アプリを正常にプロファイリングするには、アプリの Project オプションでプロファイリングを許可する必要があります。

  • iOS:

> iOS デバッグ > プロファイリングを有効にする

Visual Studio for Mac の [iOS オプション] ダイアログ。

  • Android:

Android デバッグ > 構築 > 開発者向けインストルメンテーションを有効にする

Visual Studio for Mac の [Android オプション] ダイアログ。

プロファイラーの起動

Xamarin Profiler は、iOS または Android アプリケーションをプロファイルするときに IDE から起動することも、スタンドアロンアプリケーションとして起動することもできます。

起動 (Visual Studio for Mac から)

  1. 最初に、Visual Studio for Mac にアプリケーションが読み込まれていることを確認し、(既定) のデバッグ構成を選択します。
  2. 次の図に示すように、Visual Studio for Mac を参照して プロファイリングを開始 > 実行 するか、Visual Studio で Xamarin Profiler > を分析 してプロファイラーを開きます。

Visual Studio for Mac からプロファイラーを起動しています。

メニュー項目が表示されない場合は、 トラブルシューティングガイドを参照してください。

これにより、プロファイラーが起動し、アプリケーションのプロファイリングが自動的に開始されます。

プロファイラーを使用して、メモリとパフォーマンスを測定できます。 これは、次のセクションで詳しく説明する割り当てと時間プロファイラーの音色によって実現されます。

プロファイラーセッションの保存と読み込み

プロファイリングセッションをいつでも保存するには、プロファイラーのメニューバーから [ ファイル > 名前を付けて保存... ] を選択します。 これにより、ファイルは、プロファイリングデータ用の特殊で高度に圧縮された形式で .mlpd 形式で保存されます。

インストールが完了すると、次のスクリーンショットに示すように、アプリケーションフォルダーに Xamarin Profiler があります。

Mac からスタンドアロンのプロファイラーを開きます。

スタンドアロン アプリケーションを開き、[ターゲットの選択] を選択してファイルを読み込んで、プロファイラーに .mlpd ファイルを読み込めます。

詳細については 、「.mlpd ファイルの生成」を参照してください

プロファイラーの機能

次Xamarin Profiler、次に示す 5 つのセクションで構成されています。

  • ツール バー – プロファイラーの上部に位置し、プロファイリングの開始/停止、ターゲット プロセスの選択、アプリの実行時間の表示、プロファイラー アプリケーションを構成する分割ビューの選択を行うオプションが用意されています。
  • インストル メント リスト – プロファイリング セッション用に読み込まれたすべてのインストルメントが一覧表示されます。
  • プロット グラフ – これらのグラフは、インストルメント リスト内の関連するインストルメントに水平方向に関連します。 スライダー (タイム プロファイラーの下に表示) を使用して、スケールを変更できます。
  • [Instrument Detail]/( インストルメントの詳細)領域 - 現在の Instrument の選択したビューによって表示されるデータが含されます。 これらのビューの詳細については、以下のセクションを参照してください。
  • インスペクター ビュー – セグメント化されたコントロールで選択できるセクションが含まれる。 セクションは、選択したインストルメントに依存し、構成設定、統計、スタック トレース情報、ルートへのパスが含まれます。

割り当て

割り当てインストルメントでは、アプリケーション内のオブジェクトの作成とガベージ コレクションに関する詳細情報が提供されます。

プロファイラーの上部には割り当てグラフがあります。このグラフには、プロファイル中に一定間隔で割り当てられたメモリの量が表示されます。 現在、割り当てグラフは割り当ての総数であり、その時点でのヒープのサイズではありません。 ある意味では、それは決して下がらないので、増加するだけになります。 これには、スタックに割り当てられたオブジェクトが含まれます。 使用されるランタイム バージョンに応じて、同じアプリの場合でも、グラフの外観が異なる場合があります。

Allocations インストルメントにはさまざまなデータ ビューがあります。このビューを使用すると、開発者はアプリケーションでメモリを使用して解放する方法を分析できます。 これらのビューについては、以下で説明します。

  • 割り 当て – すべての割り当ての一覧が表示され、クラス名でグループ化されます。 これにより、使用されているクラスとメソッド、使用される頻度、および使用されるクラスの集合的なサイズの概要が示されます。 クラスをダブルクリックすると、割り当てられたメモリが表示されます。

割り当てのインスペクター ビューには、オブジェクトのフィルター処理とグループ化、割り当てられたメモリに関する統計、上位の割り当て、およびスタック トレースとルートへのパスのビューのオプションが表示されます。

  • コール ツリー – アプリケーション内のすべてのスレッドの呼び出しツリー全体が表示され、各ノードに割り当てられたメモリに関する情報が含まれます。 一覧で要素を選択すると、すべての兄弟ノードが灰色で表示されます。 ツリーを展開するか、要素をダブルクリックしてドリルダウンできます。このデータ ビューを表示するときに、表示設定インスペクター ビューを使用して表示方法を変更できます。 現在、次の 2 つのオプションがあります。
    1. 反転呼び出しツリー – スタック トレースを上から下に考慮します。 これは、CPU が時間を費やしている最も深い方法を示す便利なビュー オプションです。
    2. [スレッド別] – このオプションは、スレッドごとに呼び出しツリーを整理します。
  • スナップショット – このペインには、メモリ スナップショットに関する情報が表示されます。 ライブ アプリケーションのプロファイリング中にこれらを生成するには、保持および解放されるメモリを確認する各ポイントにあるツール バーの [カメラ] ボタンをクリックします。 その後、各スナップショットをクリックして、その下で何が起こっているかを確認できます。 スナップショットは、アプリのライブ プロファイル時にのみ作成できます。

タイム プロファイラー

Time Profiler インストルメントでは、アプリケーションの各メソッドで費やされる時間を正確に測定します。 アプリケーションは一定の間隔で一時停止され、アクティブな各スレッドでスタック トレースが実行されます。 [Instrument Detail]/(インストルメントの詳細)領域の各行には、その後に続く実行パスが表示されます。

次のスクリーンショットに示すように、プロット グラフには、アプリの実行時に受信したサンプルの数が表示されます。

  • コール ツリー – 各メソッドで費やされた時間を示します。

Cycles

C# と F# のマネージド コードを使用すると、非常に一般的な場合があります。残念ながら、破棄されるオブジェクトへの参照を作成するのは非常に簡単です。 このインストルメントを使用すると、これらのオブジェクトを特定し、アプリケーションで参照されているサイクルを表示できます。

アプリケーションのプロファイリング

現時点では、既定のデバッグ構成のみをプロファイルできます。

他の構成でアプリをプロファイルすると、次のメッセージ ダイアログが表示されます。

[更新 ] を選択 して続行します。

SGen ガベージ コレクターとプロファイリング

SGen ガベージ コレクターは、すべての Xamarin プラットフォームに使用されます。

SGen はジェネレーション GC であり、アプリケーションのオブジェクトを 3 つのヒープ (大きなヒープ、大きなオブジェクト空間) に割り当てます。 これにより、ガベージ コレクションの実行を高速化できます。 現在、SGen は Xamarin.Android および Xamarin.iOS 統合アプリケーションの既定の GC です。

このアプリケーションを使用する Xamarin.iOS アプリケーションClassic API、保守的な非世代ガベージ コレクターであるHmhm GC を使用しました。 保守的であり、使用可能なメモリを解放する可能性が低く、プロファイラーを使用すると結果が不正確になる可能性があります。 このため、Allocations インストルメントは、Hm ガベージ コレクターでは使用できません。

アプリでHmhm GC を使用している場合はメッセージ ダイアログが表示されます。一方、Xamarin では、注意深い調査と徹底的なテストを行わずに、Hmhm を使用する既存の iOS アプリケーションを SGen に切り替えはお勧めしません。 また、これらの結果ではメモリ使用量の正確なベンチマークが提供されないので、プロファイリングのために SGen に切り替えてから元に戻す方法も推奨しません。

メモリ管理の詳細については、「メモリとパフォーマンスのベスト プラクティス 」ガイドを参照 してください。

まとめ

このガイドでは、プロファイルとは何か、および開発者にとってどのような利点があるかを見てきました。 次に、Xamarin Profiler を導入し、その動作についていくつかの履歴と情報を提供します。 最後に、Xamarin Profiler の機能をがし、割り当てと時間プロファイラーの音色について説明します。