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에서 Mac용 Visual Studio에서이 기능의 잠금을 해제 하려면 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 내에서 프로 파일링을 사용할 수 있도록 Mac용 Visual Studio 및 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는 개발자에 게 Mac용 Visual Studio 또는 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.ios, Xamarin Android 및 Xamarin.ios 응용 프로그램을 테스트할 수 있습니다 (Mac용 Visual Studio를 통해).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와는 별개의 프로세스 이며, Mac용 Visual Studio에서 시작 하는 것 외에도 독립 실행형 응용 프로그램으로 사용 하 여 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:

  • Mac용 Visual Studio (macOS, Enterprise License)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.

  • IoiOS:

프로 파일링을 사용 하도록 설정 하 > iOS 디버그 > 빌드Build > iOS Debug > Enable Profiling

Mac용 Visual Studio의 iOS 옵션 대화 상자

  • Android:

개발자 계측을 사용 하도록 설정 하 > Android 디버그 > 빌드Build > Android Debug > Enable Developer Instrumentation

Mac용 Visual Studio의 Android 옵션 대화 상자

프로파일러 시작Launching the Profiler

IOS 또는 Android 응용 프로그램을 프로 파일링 하거나 독립 실행형 응용 프로그램으로 프로 파일링 할 때 IDE에서 Xamarin Profiler를 시작할 수 있습니다.The Xamarin Profiler can be launched from your IDE when you are profiling your iOS or Android application, or as a standalone application.

Mac용 Visual Studio에서 시작Launching from Visual Studio for Mac

  1. 먼저 Mac용 Visual Studio에서 응용 프로그램을 로드 했는지 확인 하 고 (기본값) 디버그 구성을 선택 합니다.First, make sure you have your application loaded in Visual Studio for Mac, and select the (default) Debug configuration.
  2. 아래 다이어그램에 나와 있는 것 처럼 Mac용 Visual Studio에서 프로 파일링을 시작하거나 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:

Mac용 Visual Studio에서 프로파일러 시작

메뉴 항목이 표시 되지 않는 경우 문제 해결 가이드를 참조 하세요.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 보기 – 분할 된 컨트롤에서 선택할 수 있는 섹션이 포함 되어 있습니다.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. 현재 다음과 같은 두 가지 옵션이 있습니다.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

C# 및 F# 관리 코드를 사용 하면 매우 일반적 일 수 있으며, 삭제 되지 않는 개체에 대 한 참조를 만드는 것은 매우 쉽습니다.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는 세대 GC로, 응용 프로그램의 개체를 Nursery, 주요 힙 및 큰 개체 공간의 세 힙에 할당 합니다.SGen is a generational GC, which allocates objects of an application into three heaps — Nursery, Major Heap and the Large Object Space. 이렇게 하면 가비지 수집을 speedier 실행할 수 있습니다.This allows for speedier execution of garbage collection. SGen는 현재 Xamarin.ios 및 Xamarin.ios 통합 응용 프로그램에 대 한 기본 GC입니다.SGen is currently the default GC for Xamarin.Android, and Xamarin.iOS Unified applications.

Classic API 사용 하는 xamarin.ios 응용 프로그램은 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.