Xamarin Profiler

В этом руководстве рассматриваются основные функции профилировщика Xamarin. В нем рассматриваются профилировщики, профилирование и их использование, а также стандартный рабочий процесс для профилирования приложений Xamarin.

Успех приложения зависит от пользовательского интерфейса. В качестве разработчика, возможно, вы реализовали некоторые действительно удивительные функции в приложении, но если приложение вяло или полно сбоев, пользователь, скорее всего, избавиться от него.

Исторически mono содержит мощный профилировщик командной строки для сбора сведений о программах, работающих в среде выполнения Mono, называемом профилировщиком журнала Mono. Профилировщик Xamarin — это графический интерфейс для профилировщика журналов Mono и поддерживает профилирование приложений Android, iOS, tvOS и Mac на Mac, android, iOS и tvOS в Windows.

Профилировщик Xamarin имеет ряд инструментов, доступных для профилирования— выделения, циклов и профилировщика времени. В этом руководстве рассматриваются меры этих инструментов, анализ приложения и уточнение смысла данных, представленных на каждом экране.

В этом руководстве рассматриваются распространенные сценарии профилирования и представлены профилировщик в качестве инструмента для анализа и оптимизации приложений iOS и Android.

Скачивание и установка

Примечание.

Вам потребуется быть подписчиком Visual Studio Enterprise, чтобы разблокировать эту функцию в Visual Studio Enterprise в Windows или Visual Studio для Mac на Компьютере Mac.

Xamarin Profiler — это автономное приложение и интегрировано с Visual Studio для Mac и Visual Studio для включения профилирования из интегрированной среды разработки.

Скачайте пакет установки для платформы:

После скачивания запустите установщик, чтобы добавить Xamarin Profiler в систему.

Профилировщики и профилирование

Профилирование является важным и часто пропущенным шагом в разработке приложений. Профилирование — это форма динамического анализа программ. Он анализирует программу во время ее выполнения и использования. Профилировщик — это средство интеллектуального анализа данных, которое собирает сведения о сложности времени, использовании определенных методов и выделении памяти. Профилировщик позволяет детализировать и анализировать эти метрики для выявления проблемных областей в коде.

При разработке и разработке приложения важно не оптимизировать преждевременно; т. е. тратить время на разработку кода в областях, которые редко будут доступны. Это сила профилирования. Профилировщик предоставляет аналитические сведения о наиболее часто используемых частях базы кода и помогает находить области, в которых следует тратить время на улучшение. Разработчики должны заботиться о том, где большую часть времени тратится в приложении, и как используется память приложения.

Профилирование полезно во всех типах разработки, но особенно важно в разработке мобильных устройств. Неоптимизированный код гораздо более заметный на мобильных платформах, чем на настольных компьютерах, и успех вашего приложения зависит от красивого и оптимизированного кода, который работает эффективно.

Xamarin Profiler

Xamarin Profiler предоставляет разработчикам возможность профилировать приложения из Visual Studio для Mac или Visual Studio. Профилировщик собирает и отображает сведения о приложении, которое затем может использоваться разработчиком для анализа поведения приложения. Существует несколько различных способов профилирования приложения с помощью профилировщика Xamarin, а именно профилирования памяти и статистической выборки. Они выполняются с помощью инструментов выделения и профилировщика времени соответственно.

В настоящее время Xamarin Profiler можно использовать для тестирования приложений Xamarin.iOS, Xamarin.Android и Xamarin.Mac на Mac (Через Visual Studio для Mac). Профилировщик является отдельным процессом из интегрированной среды разработки и поэтому помимо запуска из Visual Studio для Mac, его можно использовать в качестве автономного приложения для проверки .exe и .mlpd файлов, созданных из профилировщика монологов.

Поддержка профилировщика

Поддержка Xamarin Profiler доступна на следующих платформах:

  • Visual Studio для Mac (macOS с корпоративной лицензией)

    • Android
      • Устройство и эмулятор
    • iOS
      • Устройство и симулятор
    • tvOS (инструмент времени не поддерживается)
      • Устройство и симулятор
    • Mac
  • Visual Studio (только корпоративная версия)

    • Android
      • Устройство и эмулятор
    • iOS [экспериментальный]
      • Устройство и симулятор
    • tvOS
      • Устройство и симулятор

Обратите внимание, что можно профилирование только конфигураций отладки.

Основы профилировщика

В этом разделе представлены части профилировщика Xamarin и его функции.

Разрешить профилирование в приложении

Прежде чем успешно профилировать приложение, необходимо разрешить профилирование в параметрах проекта приложения.

  • iOS.

Сборка > отладки > iOS Enable Profiling

iOS Options Dialog in Visual Studio for Mac

  • Android:

Создание > средства инструментирования разработчика для отладки > Android

Android Options Dialog in Visual Studio for Mac

Запуск профилировщика

Xamarin Profiler можно запустить из интегрированной среды разработки при профилировании приложения iOS или Android или автономного приложения.

Запуск из Visual Studio для Mac

  1. Сначала убедитесь, что приложение загружено в Visual Studio для Mac и выберите конфигурацию отладки (по умолчанию).
  2. Перейдите к запуску профилирования >запуска в Visual Studio для Mac или анализ > профилировщика Xamarin в Visual Studio, чтобы открыть профилировщик, как показано на схеме ниже:

Launching the Profiler from Visual Studio for Mac

Если элементы меню не отображаются, обратитесь к руководству по устранению неполадок.

При этом профилировщик запускается и автоматически запускается профилирование приложения.

Профилировщик можно использовать для измерения памяти и производительности. Это достигается с помощью инструментов выделения и профилировщика времени, которые мы подробно рассмотрим в следующем разделе.

Сохранение и загрузка сеансов профилировщика

Чтобы сохранить сеанс профилирования в любое время, в строке меню профилировщика нажмите кнопку "Сохранить как...>". При этом файл сохраняется в формате mlpd , специальном, строго сжатом формате для данных профилирования.

После установки Xamarin Profiler можно найти в папке "Приложения", как показано на снимке экрана ниже:

Open standalone Profiler from Mac

Вы можете загрузить MLPD-файлы в профилировщик, открыв автономное приложение, выбрав "Выбрать целевой объект " и загрузив файл.

Дополнительные сведения см. в разделе "Создание MLPD-файлов".

Функции профилировщика

Профилировщик Xamarin состоит из пяти разделов, как показано ниже:

  • Панель инструментов — расположенная в верхней части профилировщика, она предлагает параметры запуска и остановки профилирования, выберите целевой процесс, просмотрите время выполнения приложения и выберите разделенные представления, составляющие приложение профилировщика.
  • Список инструментов — это список всех инструментов, загруженных для сеанса профилирования.
  • Диаграмма графиков — эти диаграммы связаны по горизонтали с соответствующими инструментами в списке инструментов. Ползунок (показан под профилировщиком времени) можно использовать для изменения масштаба.
  • Область сведений о инструменте— содержит данные, отображаемые выбранным представлением текущего инструмента. Мы рассмотрим эти представления более подробно в разделе ниже.
  • Представление инспектора — содержит разделы, которые можно выбрать сегментным элементом управления. Разделы зависят от выбранного инструмента и включают: конфигурацию Параметры, статистику, сведения трассировки стека и путь к корням.

Распределения

Инструмент выделения предоставляет подробные сведения о объектах в приложении по мере их создания и сбора мусора.

В верхней части профилировщика находится диаграмма выделения, которая отображает объем памяти, выделенный через регулярные интервалы во время профилирования. В настоящее время диаграмма выделения — это общее количество выделений, а не размер кучи в данный момент времени. В смысле, он никогда не будет спускаться, он только когда-либо увеличится. Это включает объекты, выделенные в стеке. В зависимости от используемой версии среды выполнения диаграмма может выглядеть иначе даже для одного приложения.

В инструменте выделения существуют различные представления данных, которые позволяют разработчикам анализировать использование и освобождение памяти приложения. Эти представления описаны ниже.

  • Выделение — отображается список всех выделений и группирует их по имени класса. Это обеспечивает отличный обзор используемых классов и методов, как часто они используются, а также коллективный размер используемых классов. При двойном щелчке по классу будет отображаться выделенная память:

Представление инспектора для выделения предоставляет параметры фильтрации и группировки объектов, предоставляя статистику по выделенной памяти, а также верхние выделения, а также представления трассировки и пути стека в корневой каталог.

  • Дерево вызовов — отображается все дерево вызовов всех потоков в приложении и содержит сведения о памяти, выделенной на каждом узле. Если элемент выбран в списке, все одноуровневые узлы будут отображаться серыми. Вы можете развернуть дерево или дважды щелкнуть элемент, чтобы детализировать его. При отображении этого представления данных представление инспектора параметров отображения можно использовать для изменения способа представления. В настоящее время существует два варианта:
    1. Перевернутое дерево вызовов— это считается трассировкой стека сверху вниз. Это удобный вариант представления, так как он указывает на самые глубокие методы, в которых ЦП тратит свое время.
    2. Разделение по потоку — этот параметр упорядочивает дерево вызовов по потоку.
  • Моментальные снимки— в этой области отображаются сведения о моментальных снимках памяти. Чтобы создать их при профилировании динамического приложения, нажмите кнопку Камера на панели инструментов на каждой точке, которую вы хотите увидеть, какая память сохранена и освобождена. Затем можно щелкнуть каждый моментальный снимок, чтобы изучить, что происходит под капотом. Обратите внимание, что моментальные снимки можно создавать только при динамическом профилировании приложения.

Профилировщик времени

Инструмент профилировщика времени измеряет точно, сколько времени тратится в каждом методе приложения. Приложение приостановлено через регулярные интервалы, и трассировка стека выполняется в каждом активном потоке. Каждая строка в области сведений о инструменте показывает путь выполнения, который был выполнен.

Диаграмма графики, как показано на снимке экрана ниже, отображает количество примеров, полученных приложением при выполнении:

  • Дерево вызовов— показывает время, затраченное на каждый метод:

Cycles

С помощью управляемого кода C# и F# это может быть довольно распространено и, к сожалению, довольно легко создавать ссылки на объекты, которые никогда не будут удалены. Этот инструмент позволяет определить эти объекты и отобразить циклы, на которые ссылается приложение.

Приложения профилирования

В настоящее время можно профилировать только конфигурации отладки по умолчанию.

Если профилировать приложение с любой другой конфигурацией, появится следующее диалоговое окно сообщения:

Нажмите кнопку "Обновить" , чтобы продолжить.

Сборщик мусора SGen и профилирование

Сборщик мусора SGen используется для всех платформ Xamarin.

SGen — это поколение GC, которое выделяет объекты приложения в три кучи — детский сад, основная куча и большое пространство объектов. Это позволяет ускорить выполнение сборки мусора. В настоящее время SGen — это GC по умолчанию для Xamarin.Android и унифицированных приложений Xamarin.iOS.

Приложение Xamarin.iOS с помощью классического API использовало Boehm GC — консервативный, негенерационный сборщик мусора. Как и консервативный, скорее всего, освободить доступную память, что может привести к неточным результатам при использовании профилировщика. По этой причине инструмент выделения не может использоваться с сборщиком мусора Boehm.

Если приложение использует boehm GC, Xamarin не рекомендует переключение существующего приложения iOS, которое использует Boehm на SGen без тщательного исследования и тщательного тестирования. Xamarin также не рекомендует переключиться на SGen для профилирования, а затем переключиться обратно, так как эти результаты не обеспечивают точные тесты использования памяти.

Дополнительные сведения об управлении памятью см. в руководстве по использованию памяти и производительности.

Итоги

В этом руководстве мы рассмотрели, что такое профилирование и как это выгодно для разработчика. Затем мы представили профилировщик Xamarin, предоставляя некоторую историю и информацию о том, как она работает. Наконец, мы изучили функции профилировщика Xamarin и изучили инструменты выделения и профилировщика времени.