Xamarin Profiler

이 가이드에서는 Xamarin Profiler의 주요 기능을 살펴봅니다. 프로파일러, 프로파일링 및 사용해야 하는 시기 및 Xamarin 애플리케이션 프로파일링을 위한 표준 워크플로를 살펴봅니다.

애플리케이션의 성공은 최종 사용자 환경에 따라 달라집니다. 개발자는 앱에서 정말 멋진 몇 가지 기능을 구현했을 수도 있지만 앱이 느리거나 크래시로 가득 차 있으면 사용자가 제거될 가능성이 큽니다.

지금까지 Mono는 Mono 로그 프로파일러라는 Mono 런타임에서 실행되는 프로그램에 대한 정보를 수집하기 위한 강력한 명령줄 프로파일러제공합니다. Xamarin Profiler는 Mono 로그 프로파일러에 대한 그래픽 인터페이스이며 Mac의 Android, iOS, tvOS 및 Mac 애플리케이션과 Windows의 Android, iOS 및 tvOS 애플리케이션 프로파일링을 지원합니다.

Xamarin Profiler에는 프로파일링에 사용할 수 있는 다양한 계측(할당, 주기 및 시간 프로파일러)이 있습니다. 이 가이드에서는 이러한 계측이 측정한 내용과 애플리케이션을 분석하는 방법을 살펴보고 각 화면에 표시되는 데이터의 의미를 명확히 설명합니다.

이 가이드에서는 일반적인 프로파일링 시나리오를 검토하고 iOS 및 Android 애플리케이션을 분석하고 최적화하는 데 도움이 되는 도구로 프로파일러를 소개합니다.

다운로드 및 설치

참고 항목

Windows의 Visual Studio Enterprise 또는 Mac의 Mac용 Visual Studio 이 기능의 잠금을 해제하려면 Visual Studio Enterprise 구독자여야 합니다.

Xamarin Profiler는 독립 실행형 애플리케이션이며 Mac용 Visual Studio 및 Visual Studio와 통합되어 IDE 내에서 프로파일링을 사용하도록 설정합니다.

플랫폼에 대한 설치 패키지를 다운로드합니다.

다운로드한 후 설치 관리자를 시작하여 시스템에 Xamarin Profiler를 추가합니다.

프로파일러 및 프로파일링

프로파일링은 애플리케이션 개발에서 중요하고 종종 간과되는 단계입니다. 프로파일링은 동적 프로그램 분석한 형태이며 실행 중이고 사용 중인 동안 프로그램을 분석합니다. 프로파일러가 시간 복잡성, 특정 메서드의 사용 및 할당되는 메모리에 대한 정보를 수집하는 데이터 마이닝 도구입니다. 프로파일러를 사용하면 이러한 메트릭을 자세히 드릴하고 분석하여 코드의 문제 영역을 정확히 파악할 수 있습니다.

애플리케이션을 디자인하고 개발할 때는 조기에 최적화하지 않는 것이 중요합니다. 즉, 거의 액세스하지 않는 영역에서 코드를 개발하는 데 시간을 할애합니다. 이것이 프로파일링의 힘입니다. 프로파일러를 사용하면 코드 베이스에서 가장 일반적으로 사용되는 부분에 대한 인사이트를 얻을 수 있으며, 개선에 시간을 할애해야 하는 영역을 찾을 수 있습니다. 개발자는 애플리케이션에서 대부분의 시간이 소요되는 위치와 애플리케이션에서 메모리를 사용하는 방법을 이해해야 합니다.

프로파일링은 모든 유형의 개발에 유용하지만 모바일 개발에서 특히 중요합니다. 최적화되지 않은 코드는 데스크톱 컴퓨터보다 모바일 플랫폼에서 훨씬 더 눈에 띄며, 앱의 성공은 효율적으로 실행되는 아름답고 최적화된 코드에 따라 달라집니다.

Xamarin Profiler

Xamarin Profiler는 개발자에게 Mac용 Visual Studio 또는 Visual Studio 내부에서 애플리케이션을 프로파일하는 방법을 제공합니다. 프로파일러가 앱에 대한 정보를 수집하고 표시합니다. 그러면 개발자가 애플리케이션의 동작을 분석하는 데 사용할 수 있습니다. Xamarin Profiler, 즉 메모리 프로파일링 및 통계 샘플링을 사용하여 애플리케이션을 프로파일링하는 다양한 방법이 있습니다. 할당 및 시간 프로파일러 계측을 통해 각각 수행됩니다.

현재 Xamarin Profiler를 사용하여 Mac에서 Xamarin.iOS, Xamarin.Android 및 Xamarin.Mac 애플리케이션을 테스트할 수 있습니다(Mac용 Visual Studio 통해). 프로파일러가 IDE와 별도의 프로세스이므로 Mac용 Visual Studio 시작하는 것 외에도 독립 실행형 애플리케이션으로 사용하여 모노 로그 프로파일러에서 생성된 .exe 및 .mlpd 파일을 검사할 수 있습니다.

프로파일러 지원

Xamarin Profiler에 대한 지원은 다음 플랫폼에서 사용할 수 있습니다.

  • Mac용 Visual Studio(macOS, 엔터프라이즈 라이선스 사용)

    • Android
      • 디바이스 및 에뮬레이터
    • iOS
      • 디바이스 및 시뮬레이터
    • tvOS(Time Instrument는 지원되지 않음)
      • 디바이스 및 시뮬레이터
    • Mac
  • Visual Studio(엔터프라이즈 버전만 해당)

    • Android
      • 디바이스 및 에뮬레이터
    • iOS [실험적]
      • 디바이스 및 시뮬레이터
    • tvOS
      • 디바이스 및 시뮬레이터

디버그 구성만 프로파일할 있습니다.

프로파일러 기본 사항

이 섹션에서는 Xamarin Profiler의 일부를 소개하고 해당 기능을 안내합니다.

앱에서 프로파일링 허용

앱을 성공적으로 프로파일링하려면 앱의 프로젝트 옵션에서 프로파일링을 허용해야 합니다.

  • iOS:

iOS 디버그 > 프로파일링 사용 빌드 >

iOS Options Dialog in Visual Studio for Mac

  • Android:

Android 디버그 > 빌드 > 개발자 계측 사용

Android Options Dialog in Visual Studio for Mac

프로파일러 시작

iOS 또는 Android 애플리케이션을 프로파일링할 때 또는 독립 실행형 애플리케이션으로 IDE에서 Xamarin Profiler를 시작할 수 있습니다.

Mac용 Visual Studio 시작

  1. 먼저 애플리케이션이 Mac용 Visual Studio 로드되었는지 확인하고(기본값) 디버그 구성을 선택합니다.
  2. 아래 다이어그램에 설명된 대로 visual Studio에서 Mac용 Visual Studio 실행 > 시작 프로파일링또는 Xamarin Profiler 분석 > 으로 이동하여 프로파일러를 엽니다.

Launching the Profiler from Visual Studio for Mac

메뉴 항목이 표시되지 않으면 문제 해결 가이드참조하세요.

그러면 Profiler가 시작되고 애플리케이션 프로파일링이 자동으로 시작됩니다.

프로파일러를 사용하여 메모리 및 성능을 측정할 수 있습니다. 할당 및 시간 프로파일러 계측을 통해 이를 달성합니다. 이 도구는 다음 섹션에서 자세히 살펴볼 것입니다.

프로파일러 세션 저장 및 로드

프로파일링 세션을 언제든지 저장하려면 프로파일러 메뉴 모음에서 다른 > 이름으로 파일 저장...을 선택합니다. 이렇게 하면 프로파일링 데이터에 대해 매우 압축된 특수 형식인 mlpd 형식으로 파일이 저장됩니다.

Xamarin Profiler가 설치되면 아래 스크린샷과 같이 애플리케이션 폴더에서 Xamarin Profiler를 찾을 수 있습니다.

Open standalone Profiler from Mac

독립 실행형 애플리케이션을 열고 대상 선택을 선택하고 파일을 로드하여 .mlpd 파일을 Profiler에 로드할 수 있습니다.

자세한 내용은 .mlpd 파일 생성을 참조 하세요.

프로파일러 기능

Xamarin Profiler는 아래 그림과 같이 5개의 섹션으로 구성됩니다.

  • 도구 모음 – 프로파일러 맨 위에 있는 프로파일링을 시작/중지하고, 대상 프로세스를 선택하고, 앱의 실행 시간을 보고, 프로파일러 애플리케이션을 구성하는 분할 보기를 선택하는 옵션을 제공합니다.
  • 계측 목록 – 프로파일링 세션에 대해 로드된 모든 계측을 나열합니다.
  • 차트 그림 - 이러한 차트는 계측 목록의 관련 계측기와 가로로 관련됩니다. 시간 프로파일러 아래에 표시된 슬라이더를 사용하여 배율을 변경할 수 있습니다.
  • 계측 세부 정보 영역 - 현재 계측의 선택한 보기에서 표시되는 데이터를 포함합니다. 아래 섹션에서 이러한 보기를 자세히 살펴보겠습니다.
  • 검사기 보기 – 분할된 컨트롤에서 선택할 수 있는 섹션이 포함되어 있습니다. 섹션은 선택한 계측에 따라 다르며 구성 설정, 통계, 스택 추적 정보 및 루트 경로가 포함됩니다.

할당

할당 계측기는 생성되고 가비지 수집되는 애플리케이션의 개체에 대한 자세한 정보를 제공합니다.

프로파일러의 맨 위에는 프로파일링 중에 정기적으로 할당된 메모리 양을 표시하는 할당 차트가 있습니다. 현재 할당 그래프는 총 할당 수이며 해당 시점의 힙 크기는 아닙니다. 어떤 의미에서, 그것은 결코 내려 가지 않을 것 이다, 그것은 단지 이제까지 증가 할 것 이다. 여기에는 스택에 할당된 개체가 포함됩니다. 사용된 런타임 버전에 따라 차트는 동일한 앱에서도 다르게 보일 수 있습니다.

할당 계측에는 개발자가 애플리케이션에서 메모리를 사용하고 해제하는 방법을 분석할 수 있는 다양한 데이터 보기가 있습니다. 이러한 보기는 아래에 설명되어 있습니다.

  • 할당 – 모든 할당 목록을 표시하고 클래스 이름으로 그룹화합니다. 이를 통해 사용 중인 클래스 및 메서드, 사용되는 빈도 및 사용되는 클래스의 집합적 크기에 대해 간략하게 설명합니다. 클래스를 두 번 클릭하면 할당된 메모리가 표시됩니다.

할당에 대한 검사기 보기는 개체 필터링 및 그룹화, 할당된 메모리 및 상위 할당에 대한 통계 및 스택 추적 및 루트 경로에 대한 뷰를 제공하는 옵션을 제공합니다.

  • 호출 트리 – 애플리케이션에 있는 모든 스레드의 전체 호출 트리를 표시하고 각 노드에 할당된 메모리에 대한 정보를 포함합니다. 목록에서 요소를 선택하면 모든 형제 노드가 회색으로 표시됩니다. 트리를 확장하거나 요소를 두 번 클릭하여 드릴다운할 수 있습니다. 이 데이터 뷰를 표시할 때 표시 설정 검사기 보기를 사용하여 표시되는 방식을 변경할 수 있습니다. 현재 두 가지 옵션이 있습니다.
    1. 반전된 호출 트리 – 스택 추적을 위에서 아래로 고려합니다. CPU가 시간을 소비하는 가장 깊은 방법을 나타내기 때문에 편리한 보기 옵션입니다.
    2. 스레드 별로 구분 – 이 옵션은 스레드별로 호출 트리를 구성합니다.
  • 스냅샷 – 이 창에는 메모리 스냅샷 대한 정보가 표시됩니다. 라이브 애플리케이션을 프로파일링하는 동안 이를 생성하려면 유지 및 해제되는 메모리를 확인하려는 각 지점에서 도구 모음의 카메라 단추를 클릭합니다. 그런 다음 각 스냅샷 클릭하여 내부적으로 어떤 일이 일어나고 있는지 살펴볼 수 있습니다. 스냅샷 앱을 라이브 프로파일링할 때만 사용할 수 있습니다.

시간 프로파일러

Time Profiler 계측기는 애플리케이션의 각 메서드에서 소요되는 시간을 정확히 측정합니다. 애플리케이션은 정기적으로 일시 중지되고 스택 추적은 각 활성 스레드에서 실행됩니다. 계측 세부 정보 영역의 각 행에 따라 수행된 실행 경로가 표시됩니다.

아래 스크린샷과 같이 그림 차트는 앱이 실행될 때 수신한 샘플 수를 표시합니다.

  • 호출 트리 – 각 메서드에서 소요된 시간을 표시합니다.

주기

C# 및 F# 관리 코드를 사용하면 매우 일반적일 수 있으며, 아쉽게도 삭제되지 않는 개체에 대한 참조를 쉽게 만들 수 있습니다. 이 계측기를 사용하면 해당 개체를 정확히 찾아내고 애플리케이션에서 참조되는 주기를 표시할 수 있습니다.

프로파일링 애플리케이션

현재 기본 디버그 구성만 프로파일될 수 있습니다.

다른 구성으로 앱을 프로파일하는 경우 다음 메시지 대화 상자가 표시됩니다.

업데이트를 선택하여 계속합니다.

SGen 가비지 수집기 및 프로파일링

SGen 가비지 수집기는 모든 Xamarin 플랫폼에 사용됩니다.

SGen은 애플리케이션의 개체를 세 개의 힙(보육, 주 힙 및 큰 개체 공간)으로 할당하는 세대별 GC입니다. 이렇게 하면 가비지 수집을 더 빠르게 실행할 수 있습니다. SGen은 현재 Xamarin.Android 및 Xamarin.iOS 통합 애플리케이션의 기본 GC입니다.

클래식 API를 사용하는 Xamarin.iOS 애플리케이션은 보수적인 비세대 가비지 수집기인 Boehm GC를 사용했습니다. 보수적이므로 사용 가능한 메모리를 확보할 가능성이 적기 때문에 프로파일러를 사용할 때 부정확한 결과가 발생할 수 있습니다. 이러한 이유로 Allocations 계측기는 Boehm 가비지 수집기에서 사용할 수 없습니다.

앱에서 Boehm GC를 사용하는 경우 메시지 대화 상자가 표시되지만, Xamarin은 신중한 연구 및 철저한 테스트 없이 Boehm을 사용하는 기존 iOS 애플리케이션을 SGen으로 전환하는 것을 권장하지 않습니다. 또한 Xamarin은 프로파일링을 위해 SGen으로 전환한 다음 다시 전환하는 것이 좋습니다. 이러한 결과는 메모리 사용량에 대한 정확한 벤치마크를 제공하지 않기 때문에 권장되지 않습니다.

메모리 관리에 대한 자세한 내용은 메모리 및 성능 모범 사례 가이드를 참조 하세요 .

요약

이 가이드에서는 프로파일링이 무엇이며 개발자에게 어떤 이점이 있는지 살펴보았습니다. 그런 다음 Xamarin Profiler를 소개하여 작동 방식에 대한 몇 가지 기록과 정보를 제공했습니다. 마지막으로 Xamarin Profiler의 기능을 둘러보고 할당 및 시간 프로파일러 계측을 살펴보겠습니다.