В помощь мобильному разработчику
xamarin profiler logo

Встречайте, Xamarin Profiler

Александр Алексеев

В распоряжении разработчиков есть много инструментов, помогающих выявлять в коде проблемы (и сохранять наше душевное равновесие); к примеру, функции IDE, такие как IntelliSense, находят ошибки в момент набора кода, отладчик выводит в приложении окно при его запуске, а профайлер, в свою очередь, показывает нам, как наше приложение использует ресурсы и каким образом их можно организовать более эффективно. Xamarin Profiler в настоящее время является единственным способом управлять профилем (C#) кода и находить проблемы производительности и памяти в приложениях Xamarin. Он также может быть сопряжен с нативными профайлерами, такими как Xcode Instruments и Android Monitor, для обеспечения лучшей производительности приложений и форм их поведения.

На прошлой неделе на Microsoft Connect(); мы анонсировали первый стабильный релиз Xamarin Profiler, который доступен сегодня на загрузочной странице Xamarin, как часть полной установки Xamarin для пользователей MSDN Enterprise или же можно скачать автономный установщик здесь. Мы разработали красивые, нативные Profiler-приложения как для Mac, так и для Windows с целью помочь разработчикам собирать и интерпретировать данные о профилировании.

Xamarin Profiler

Windows-профайлер

 

Запуск профайлера

Чтобы начать сеанс профилирования, запустите приложение на устройстве или эмуляторе с подключенным Xamarin Profiler. В Visual Studio откройте свой Xamarin-проект и выберите Analyze > Xamarin Profiler, чтобы начать сеанс. В Xamarin Studio и Visual Studio для Mac выберите Run > Start Profiling.

Сеансы Xamarin Profiler могут быть также сохранены в формате mlpd (Mono Log Profiler Data). Дважды кликнув по файлу mlpd можно открыть его в Xamarin Profiler. Эти файлы можно перемещать между Windows и Mac.

 

Инструменты

При запуске Xamarin Profiler появится предложение выбрать один инструмент либо их группу для сбора данных о приложении. Каждый инструмент собирает определенную информацию о приложении, с тем чтобы помочь диагностировать различные типы проблем. Xamarin Profiler поставляется с тремя инструментами: Allocations, Time Profiler и Cycles. Давайте разберёмся в каждом из них, чтобы узнать, как они помогут нам разрабатывать более совершенные приложения.

 

Allocations

Инструмент Allocations показывает, сколько памяти используется приложением и на что она им расходуется. На вкладке allocations указывается список всех объектов, созданных за время «жизни» приложения, а также на панели детализации справа показываются дополнительные фильтры, статистические данные и диаграммы с обобщающей сводкой использования памяти:

Xamarin Profiler

Mac-профайлер

 

Мы можем дополнительно отфильтровать список Allocations, с тем чтобы найти полезные для нас объекты. Например, мы можем отыскать объекты из нашего кода, выполнив поиск в пространстве имен. Xamarin Profiler отмечает наши объекты синим цветом:

Xamarin Profiler

Mac-профайлер

 

Другой способ фильтрации данных Allocation состоит в том, чтобы ограничивать информацию конкретного сегмента с помощью инструмента «указателя». Инструмент «указатель» позволяет выделить ту часть данных, на которой нужно сосредоточить внимание. Благодаря этому можно ограничивать список Allocations, выделяя объекты на установленный промежуток времени:

Xamarin Profiler

Mac-профайлер

 

Инструмент Allocations также показывает дерево вызовов, которое отображает использование памяти в виде данных, сгруппированных по вызову метода. У нас есть возможность посмотреть дерево вызовов, разделённое по темам, а также в инвертированном порядке, где показывается использование памяти сперва на самом детализированном уровне, а затем её путь вверх по стеку вызовов:

Xamarin Profiler

Mac-профайлер

 

Снимки состояния (Snapshots)

Приятной особенностью инструментов Allocations являются «снимки состояния» — возможность выводить список всех объектов в приложении в определенный момент времени. Мы можем сделать снимок состояния в любой момент во время сеанса профилирования, нажав на значок камеры в средствах управления Profiler в левом верхнем углу. Красные линии в консоли обозначают снимки состояния в сеансе профилирования:

Xamarin Profiler

Windows-профайлер

 

Двойной клик по снимку состояния покажет объекты, которые в настоящие время находятся в памяти. Если выбрать Only New Objects (оставить только новые объекты) в параметрах отображения, тогда можно ограничить показываемые объекты дельтой между предыдущим снимком состояния и текущим. Благодаря этому мы сможем получить представление о том, что было создано между двумя промежутками во времени:

Xamarin Profiler

Windows-профайлер

 

Time Profiler

Time Profiler использует выборку, с тем чтобы определить, где наше приложение тратит большую часть времени. Выборка представляет собой легкий метод профилирование производительности путём опросов приложения через регулярные промежутки времени для определения того, какой код выполняется в тот момент, а затем формирования гипотезы о том, сколько времени различным частям программы требуется на его выполнение.

В Xamarin Profiler дерево вызовов в первой вкладке представляет собой примерно то же самое, что и в Allocations, но вместо того, чтобы отображать использование памяти по методу, оно показывает данные о том, сколько времени было потрачено в каждом методе.

Во второй вкладке список выборки демонстрирует нам разбивку её результатов:

Xamarin Profiler

Mac-профайлер

 

Cycles

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

Xamarin Profiler предоставляет список циклов на вкладке Roots & Cycles. Нас в первую очередь интересуют циклы запланированного выполнения объектов в нашем коде. Если цикл обнаружен, Xamarin Profiler отобразит корневой объект в списке слева и отрисует в правой стороне график со всеми объектами, участвующими в цикле. Корень цикла изображен фиолетовым цветом с зависимостями между объектами, представленными стрелками:

Xamarin Profiler

Windows-профайлер

Для получения дополнительной информации о Cycles обратитесь к подготовленному нами простому примеру приложения для нативных циклов обращения, а также к руководству Джеймса Кланси (James Clancey) «Улучшение кроссплатформенной производительности с помощью Xamarin», которое содержит подробную информацию о том, как формируются циклы и о том, как их следует исправлять.

 

Информационные ресурсы

Xamarin Bug Tracker: прямая ссылка, куда следует отправлять сообщения о проблемах с Profiler.

Автор: Nina Vyedin
ИсточникОфициальный блог Xamarin

Александр Алексеев
Александр Алексеев

Xamarin - разработчик. Работаю с .NET платформой с 2012 года, программирую в основном с использованием C#. За это время успел поработать с ASP.NET, Entity Framework, MSSQL, Git

Поиск файлов в эмуляторе
VSTS и HockeyApp

Написать ответ