Xamarin ProfilerXamarin Profiler

このガイドでは、Xamarin Profiler の主な機能について説明します。ここでは、プロファイラー、プロファイリング、使用する時期、および Xamarin アプリケーションをプロファイリングするための標準的なワークフローについて説明します。This guide explores the key features of the Xamarin Profiler. It look at profilers, profiling and when they should be used, and at a standard workflow for profiling Xamarin applications.

アプリケーションの成功は、エンドユーザーエクスペリエンスによって異なります。An application’s success depends on the end user experience. 開発者はアプリに非常に優れた機能を実装しているかもしれませんが、アプリのクラッシュが遅い場合や、クラッシュが発生する場合は、ユーザーがそれを削除する可能性があります。As a developer you might have implemented some really awesome features in your app, but if the app is sluggish or full of crashes, the user will likely get rid of it.

Mono は、mono のログプロファイラーと呼ばれる mono ランタイムで実行されているプログラムに関する情報を収集するための強力なコマンドラインプロファイラーを備えています。Historically, Mono has featured a powerful command-line profiler for gathering information about programs running in the Mono runtime called the Mono log profiler. Xamarin Profiler Mono ログプロファイラー用のグラフィカルインターフェイスであり、Mac 上の Android、iOS、tvOS、および Mac の各アプリケーションのプロファイルと、Windows 上の Android、iOS、tvOS アプリケーションをサポートしています。The Xamarin Profiler a graphical interface for the Mono log profiler, and supports profiling Android, iOS, tvOS, and Mac applications on Mac, and Android, iOS, and tvOS applications on Windows.

Xamarin Profiler には、プロファイリング (割り当て、サイクル、タイムプロファイラー) に使用できるさまざまな音色があります。The Xamarin Profiler has a number of instruments available for profiling — Allocations, Cycles, and Time Profiler. このガイドでは、これらの音色がどのように測定されるか、および各画面に表示されるデータの意味を明確にする方法について説明します。This guide explores what these instruments measure and how they analyze your application, and clarifies the meaning of the data presented on each screen.

このガイドでは、一般的なプロファイルシナリオについて説明し、iOS および Android アプリケーションの分析と最適化を支援するツールとしてプロファイラーを紹介します。This guide examines common profiling scenarios and introduces the profiler as a tool to help analyze and optimize iOS and Android applications.

ダウンロードしてインストールするDownload and Install

注意

Windows の Visual Studio Enterprise または Mac 上の Visual Studio for Mac でこの機能のロックを解除するには、 Visual Studio Enterpriseサブスクライバーである必要があります。You will need to be a Visual Studio Enterprise subscriber to unlock this feature in either Visual Studio Enterprise on Windows or Visual Studio for Mac on a Mac.

Xamarin Profiler はスタンドアロンアプリケーションであり、IDE 内からプロファイリングを有効にするために Visual Studio for Mac と Visual Studio に統合されています。The Xamarin Profiler is a standalone application, and is integrated with Visual Studio for Mac and Visual Studio to enable profiling from within the IDE.

プラットフォームのインストールパッケージをダウンロードします。Download the install package for your platform:

ダウンロードが完了したら、インストーラーを起動して、システムに Xamarin Profiler を追加します。Once downloaded, launch the installer to add the Xamarin Profiler to your system.

プロファイラーとプロファイリングProfilers and Profiling

プロファイリングは、アプリケーション開発の重要で見落とされることが多い手順です。Profiling is an important and often overlooked step in application development. プロファイリングは、動的なプログラム分析の一種であり、プログラムの実行中および使用中に分析されます。Profiling is a form of dynamic program analysis - it analyzes the program while it is running and in use. プロファイラーは、時間の複雑さ、特定のメソッドの使用状況、および割り当てられているメモリに関する情報を収集するデータマイニングツールです。A profiler is a data mining tool that collects information about time complexity, the usage of particular methods, and the memory being allocated. プロファイラーを使用すると、これらのメトリックを掘り下げて分析し、コード内の問題の領域を特定できます。A profiler enables you to drill deep and analyze these metrics to pinpoint problem areas in code.

アプリケーションを設計および開発する際には、事前に最適化しないことが重要です。つまり、アクセス頻度の低い領域でコードを開発するために時間を費やすことになります。When designing and developing an application, it is important to not optimize prematurely; that is, spending time developing your code in areas that will rarely be accessed. これはプロファイルの機能です。This is the power of profiling. プロファイラーは、コードベースの最も一般的に使用される部分に関する洞察を提供し、改善のために時間を費やす必要がある領域を特定するのに役立ちます。A profiler provides insight into the most commonly used parts of your code base , and helps locate areas where you should spend time making improvements. 開発者は、ほとんどの時間がアプリケーションで費やされている場所と、アプリケーションでメモリがどのように使用されるかを理解する必要があります。Developers should take care to understand where most of the time is spent in your application, and how memory is used by your application.

プロファイリングはあらゆる種類の開発に役立ちますが、特にモバイル開発では非常に重要です。Profiling is helpful in all types of development, but it is especially crucial in mobile development. 最適化されていないコードは、デスクトップコンピューターよりもモバイルプラットフォームではさらに顕著になります。アプリの成功は、効率的に実行される美しいコードと最適化されたコードに依存します。Unoptimized code is much more noticeable on mobile platforms than on desktop computers, and the success of your app depends on beautiful and optimized code that runs efficiently.

Xamarin ProfilerXamarin Profiler

Xamarin Profiler を使用すると、開発者は Visual Studio for Mac または Visual Studio 内からアプリケーションをプロファイリングすることができます。The Xamarin Profiler provides developers with a way to profile applications from inside Visual Studio for Mac or Visual Studio. プロファイラーは、アプリに関する情報を収集して表示します。これは、開発者がアプリケーションの動作を分析するために使用できます。The profiler collects and displays information about the app, which can then be used by the developer to analyze an application’s behavior. Xamarin Profiler でアプリケーションのプロファイリングを行うには、さまざまな方法があります。つまり、メモリプロファイルと統計サンプリングです。There are a number of different ways to profile an application with the Xamarin Profiler, namely memory profiling and statistical sampling. これらはそれぞれ、割り当てと時間プロファイラーの音色を通じて実行されます。These are carried out through the Allocations and Time Profiler instruments respectively.

現時点では、Xamarin Profiler を使用して、Mac 上の Xamarin アプリケーション (Visual Studio for Mac 経由) をテストできます。Currently, the Xamarin Profiler can be used to test Xamarin.iOS, Xamarin.Android, and Xamarin.Mac applications on Mac (Via Visual Studio for Mac). プロファイラーは IDE とは別のプロセスであるため、Visual Studio for Mac から起動するだけでなく、それをスタンドアロンアプリケーションとして使用して、 mono ログプロファイラーから生成された .exe および .mlpd ファイルを調べることができます。The profiler is a separate process from the IDE, and so, in addition to launching from Visual Studio for Mac, it can be used as a standalone application to examine .exe and .mlpd files which have been produced from the mono log profiler.

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

Xamarin Profiler のサポートは、次のプラットフォームで使用できます。Support for the Xamarin Profiler is available on the following platforms:

  • Visual Studio for Mac (macOS、エンタープライズライセンス)Visual Studio for Mac (macOS, with Enterprise License)

    • AndroidAndroid
      • デバイスとエミュレーターDevice and Emulator
    • iOSiOS
      • デバイスとシミュレーターDevice and Simulator
    • tvOS (時刻のインストルメント化はサポートされていません)tvOS (Time Instrument is not supported)
      • デバイスとシミュレーターDevice and Simulator
    • MacMac
  • Visual Studio ( Enterpriseバージョンのみ)Visual Studio (Only Enterprise Version)

    • AndroidAndroid
      • デバイスとエミュレーターDevice and Emulator
    • iOS [試験段階]iOS [Experimental]
      • デバイスとシミュレーターDevice and Simulator
    • tvOStvOS
      • デバイスとシミュレーターDevice and Simulator

デバッグ構成のプロファイルのみが可能であることに注意してください。Note that you can only profile Debug configurations.

プロファイラーの基礎Profiler Basics

このセクションでは、Xamarin Profiler の一部を紹介し、その機能について説明します。This section introduces the parts of the Xamarin Profiler and tours its features.

アプリでのプロファイリングを許可するAllow Profiling in your App

アプリを正常にプロファイリングするには、アプリのプロジェクトオプションでプロファイリングを許可する必要があります。Before you can successfully Profile your app, you will need to allow Profiling in the app's Project Options.

  • IOSiOS:

> IOS デバッグ > プロファイリングを有効にするBuild > iOS Debug > Enable Profiling

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

  • AndroidAndroid:

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

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

プロファイラーの起動Launching the Profiler

Xamarin Profiler は、iOS または Android アプリケーションをプロファイルするときに IDE から起動することも、スタンドアロンアプリケーションとして起動することもできます。The Xamarin Profiler can be launched from your IDE when you are profiling your iOS or Android application, or as a standalone application.

起動 (Visual Studio for Mac から)Launching from Visual Studio for Mac

  1. 最初に、Visual Studio for Mac にアプリケーションが読み込まれていることを確認し、(既定) のデバッグ構成を選択します。First, make sure you have your application loaded in Visual Studio for Mac, and select the (default) Debug configuration.
  2. 次の図に示すように、[参照] を選択して Visual Studio for Mac でプロファイリングを開始するか、Visual Studio で > Xamarin Profiler を分析して、プロファイラーを開き > ます。Browse to Run > Start Profilingin Visual Studio for Mac, or Analyze > Xamarin Profiler in Visual Studio, to open the Profiler, as demonstrated in the diagram below:

Visual Studio for Mac からのプロファイラーの起動

メニュー項目が表示されない場合は、トラブルシューティングガイドを参照してください。If the menu items do not appear, refer to the troubleshooting guide.

これにより、プロファイラーが起動し、アプリケーションのプロファイリングが自動的に開始されます。This launches the Profiler and automatically starts profiling the application.

プロファイラーを使用して、メモリとパフォーマンスを測定できます。The Profiler can be used to measure memory and performance. これは、次のセクションで詳しく説明する割り当てと時間プロファイラーの音色によって実現されます。It achieves this through the Allocations and Time Profiler instruments, which we will explore in detail in the next section.

プロファイラーセッションの保存と読み込みSaving and Loading Profiler Sessions

プロファイリングセッションをいつでも保存するには、プロファイラーのメニューバーから [ファイル > 名前を付けて保存...] を選択します。To save a profiling session at any time, choose File > Save As... from the Profiler Menu bar. これにより、ファイルは、プロファイリングデータ用の特殊で高度に圧縮された形式で _.mlpd_形式で保存されます。This saves the file in mlpd format, a special, highly compressed format for profiling data.

インストールが完了すると、次のスクリーンショットに示すように、アプリケーションフォルダーに Xamarin Profiler があります。After it has been installed the Xamarin Profiler can be found in your Applications folder as illustrated in the screenshot below:

Mac からスタンドアロンのプロファイラーを開く

スタンドアロンアプリケーションを開き、 [ターゲットの選択] を選択し、ファイルを読み込むことによって、プロファイラーにmlpdファイルを読み込むことができます。You can load .mlpd files into the Profiler by opening the standalone application, selecting Choose Target and loading the file.

詳細については、「 mlpd ファイルの生成」を参照してください。For more information, see Generating .mlpd Files.

プロファイラーの機能Profiler Features

Xamarin Profiler は、次に示す5つのセクションで構成されています。The Xamarin Profiler is composed of five sections as illustrated below:

  • ツールバー –プロファイラーの上部にあり、プロファイリングの開始/停止、ターゲットプロセスの選択、アプリの実行時間の表示、およびプロファイラーアプリケーションを構成する分割ビューの選択を行うためのオプションが用意されています。Toolbar – Located at the top of the profiler, this offers options to start/stop profiling, select a target process, view the running time of the app, and select the split views that compose the profiler application.
  • [インストルメントの一覧] –プロファイルセッション用に読み込まれたすべての音色が一覧表示されます。Instrument List – This lists all instruments loaded for the profiling session.
  • プロットグラフ–これらのグラフは、インストルメントリスト内の関連する音色に水平に関連付けられています。Plot Chart – These charts relate horizontally to the relevant instruments in the instrument list. スライダー (タイムプロファイラーの下に表示) を使用して、スケールを変更できます。A slider (shown beneath Time Profiler) can be used to change the scale.
  • [インストルメントの詳細領域] -現在のインストルメントの選択したビューで表示されるデータが含まれます。Instrument Detail area - Contains data being displayed by the selected view of the current Instrument. これらのビューについては、以下のセクションで詳しく説明します。We will look at these views in more detail in the section below.
  • Inspector View –セグメント化されたコントロールで選択できるセクションが含まれます。Inspector View – This contains sections that can be selected by the segmented control. セクションは、選択したインストルメントに依存します。これには、構成設定、統計、スタックトレース情報、およびルートへのパスが含まれます。The sections are dependent on the instrument selected, and includes: Configuration Settings, Statistics, Stack Trace information, and Path to roots.

割り当てAllocations

割り当てインストルメントは、アプリケーション内のオブジェクトの作成時およびガベージコレクション時の詳細情報を提供します。The allocations instrument provides detailed information about objects in the application as they are being created and garbage collected.

プロファイラーの上部には、割り当てグラフが表示されます。このグラフには、プロファイリング中に一定間隔で割り当てられたメモリ量が表示されます。At the top of the profiler is the allocations chart, which displays the amount of memory allocated at regular intervals during the profiling. 現在、割り当てグラフは、割り当ての合計数であり、その時点でのヒープのサイズではありません。Currently the allocations graph is the total number of allocations and NOT the size of the heap at that point in time. 意味があるので、このようなことは決して増加しません。In a sense, it will never go down, it will only ever increase. これには、スタック上に割り当てられたオブジェクトが含まれます。This includes objects allocated on the stack. 使用されているランタイムのバージョンによっては、同じアプリであってもグラフが異なる外観になる場合があります。Depending on the runtime version used, the chart can look different – even for the same app.

割り当てインストルメントにはさまざまなデータビューがあります。これにより、開発者は、アプリケーションがどのようにメモリを使用してメモリを解放しているかを分析できます。There are different data views in the Allocations instrument, which allow developers to analyze how their application is using and freeing memory. これらのビューについて以下に説明します。These views are described below:

  • 割り当て–すべての割り当ての一覧を表示し、クラス名でグループ化します。Allocations – This displays a list of all allocations and groups them by class name. これにより、使用されるクラスとメソッドの概要、使用頻度、および使用されるクラスの集合サイズが提供されます。This provides a great overview of classes and methods being used, how often they are used, and the collective size of the classes used. クラスをダブルクリックすると、割り当てられたメモリが表示されます。Double clicking on a class will show the memory allocated :

割り当て用のインスペクタービューには、オブジェクトのフィルター処理とグループ化のオプション、割り当てられたメモリの統計情報、上位の割り当て、スタックトレースとルートへのパスのビューがあります。The Inspector view for Allocations provides options for filtering and grouping objects, providing statistics on memory allocated, and the top allocations, as well as views for Stack Trace and Path to Root.

  • [コールツリー] –アプリケーション内のすべてのスレッドのコールツリー全体が表示され、各ノードに割り当てられたメモリに関する情報が含まれます。Call Tree – This displays the entire call tree of all threads in the application and includes information about the memory allocated on each node. 一覧で要素が選択されると、すべての兄弟ノードが灰色で表示されます。When an element is selected in the list, all sibling nodes will appear grey. ツリーを展開するか、要素をダブルクリックしてドリルダウンすることができます。このデータビューを表示するときに、表示設定インスペクタービューを使用して、表示方法を変更できます。You can expand the tree or double-click the element to drill down into it.When displaying this data view, the display settings inspector view can be used to change the way it is presented. 現在、次の2つのオプションがあります。There are currently two options:
    1. [反転されたコールツリー ] –スタックトレースは上から下へと見なされます。Inverted Call Tree – This considers the stack trace from top to bottom. これは、CPU が時間を費やしている最も深い方法を示す、便利な表示オプションです。This is a convenient view option as it indicates the deepest methods where the CPU has been spending its time.
    2. スレッドで分離-このオプションは、呼び出しツリーをスレッドごとに整理します。Separate by thread – This option organizes the call tree by thread.
  • スナップショット–このペインには、メモリスナップショットに関する情報が表示されます。Snapshots – This pane displays information about memory snapshots. ライブアプリケーションのプロファイリング中にこれらを生成するには、保持および解放されたメモリを確認する各ポイントで、ツールバーの [カメラ] ボタンをクリックします。To generate these while profiling a live application, click the Camera button in the toolbar at each point that you'd like to see what memory is retained and released. 各スナップショットをクリックすると、内部で何が起こっているかを調べることができます。You can then click each snapshot to explore what is happening under the hood. スナップショットは、アプリをライブプロファイリングする場合にのみ実行できます。Note that snapshots can only be taken when live profiling an app.

時間プロファイラーTime Profiler

時間プロファイラーのインストルメントは、アプリケーションの各メソッドで費やされた時間を正確に測定します。The Time Profiler instrument measures exactly how much time is spent in each method of an application. アプリケーションは一定の間隔で一時停止し、アクティブな各スレッドでスタックトレースが実行されます。The application is paused at regular intervals and a stack trace is run on each active thread. [インストルメントの詳細] 領域の各行には、その後に続く実行パスが表示されます。Each row in the Instrument Detail area shows the execution path that has been followed.

次のスクリーンショットに示すように、プロットチャートには、アプリの実行中に受信したサンプルの数が表示されます。The plot chart, as shown in the screenshot below, displays the number of samples received by the app as it runs:

  • [コールツリー] –各メソッドで費やされた時間が表示されます。Call Tree – Shows amount of time spent in each method:

サイクルCycles

およびF#マネージコードをC#使用すると、非常に一般的になることがあります。また、残念ながら、破棄されないオブジェクトへの参照を作成するのは非常に簡単です。Through the use of C# and F# managed code, it can be quite common, and unfortunately quite easy to create references to objects which will never be disposed. このインストルメントを使用すると、これらのオブジェクトを特定し、アプリケーションで参照されているサイクルを表示できます。This instrument allows you to pinpoint those objects, and display the cycles referenced in your application.

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

現時点では、プロファイルできるのは既定のデバッグ構成のみです。Currently, only the default Debug configurations can be profiled.

他の構成でアプリをプロファイルすると、次のメッセージダイアログが表示されます。If you profile an app with any other configuration, you will be presented with the following message dialog:

[更新] を選択して続行します。Select Update to continue.

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

SGenガベージコレクターは、すべての Xamarin プラットフォームに使用されます。The SGen garbage collector is used for all Xamarin platforms.

SGen は、アプリケーションのオブジェクトを3つのヒープ (新世代、主要ヒープ、大きなオブジェクト領域) に割り当てる、世代の GC です。SGen is a generational GC, which allocates objects of an application into three heaps — Nursery, Major Heap and the Large Object Space. これにより、ガベージコレクションの実行を処理できます。This allows for speedier execution of garbage collection. 現在、SGen は、Xamarin Android と Xamarin の統合アプリケーションの既定の GC です。SGen is currently the default GC for Xamarin.Android, and Xamarin.iOS Unified applications.

Classic API を使用する Xamarin アプリケーションでは、Boehm GC が使用されています。これは、控えめな非世代ガベージコレクターです。Xamarin.iOS application using the Classic API used the Boehm GC – a conservative, non-generational garbage collector. 控えめなことですが、使用可能なメモリが解放される可能性は低く、プロファイラーを使用した場合の結果が不正確になる可能性があります。As it is conservative, it is less likely to free up available memory, which can lead to inaccurate results when using the profiler. このため、割り当てインストルメントは Boehm ガベージコレクターでは使用できません。For this reason, the Allocations instrument cannot be used with the Boehm garbage collector.

アプリで Boehm GC が使用されている場合、メッセージダイアログが表示されますが、Xamarin では、Boehm を使用する既存の iOS アプリケーションを、慎重に調査して徹底的なテストを行わずに、SGen に切り替えることはお勧めしません。While you will be prompted with a message dialog if your app uses the Boehm GC, Xamarin does not recommend switching existing iOS application that use Boehm to SGen without careful research and thorough testing. Xamarin では、プロファイリング用に SGen に切り替えてから戻すことは推奨されません。これらの結果はメモリ使用量の正確なベンチマークを提供しないためです。Xamarin also does not recommend switching to SGen for profiling and then switching back, as these results will not provide accurate benchmarks of memory usage.

メモリ管理の詳細については、「メモリとパフォーマンスのベストプラクティスガイド」を参照してください。For more information on memory management, refer to the Memory and Performance Best Practices guide.

まとめSummary

このガイドでは、プロファイルとは何か、および開発者にとってどのような利点があるかを見てきました。In this guide we looked at what profiling is and how it is advantageous to the developer. 次に、Xamarin Profiler を導入し、その動作についていくつかの履歴と情報を提供します。We then introduced the Xamarin Profiler, providing some history and information into how it works. 最後に、Xamarin Profiler の機能をがし、割り当てと時間プロファイラーの音色について説明します。Finally we toured the features of the Xamarin Profiler, and explored the Allocations and Time Profiler Instruments.