Generador de perfiles de Xamarin

En esta guía se exploran las características clave de Xamarin Profiler. Examina los generadores de perfiles, la generación de perfiles y cuándo se deben usar y en un flujo de trabajo estándar para generar perfiles de aplicaciones de Xamarin.

El éxito de una aplicación depende de la experiencia del usuario final. Como desarrollador, es posible que haya implementado algunas características realmente impresionantes en la aplicación, pero si la aplicación es lenta o llena de bloqueos, es probable que el usuario se deshaga de ella.

Históricamente, Mono ha presentado un potente generador de perfiles de línea de comandos para recopilar información sobre los programas que se ejecutan en el entorno de ejecución mono denominado generador de perfiles de registro mono. Xamarin Profiler es una interfaz gráfica para el generador de perfiles de registro mono y admite la generación de perfiles de aplicaciones Android, iOS, tvOS y Mac en Mac, y Android, iOS y tvOS en Windows.

Xamarin Profiler tiene varios instrumentos disponibles para la generación de perfiles: asignaciones, ciclos y generador de perfiles de tiempo. En esta guía se explora lo que miden estos instrumentos, cómo analizan la aplicación y se aclara el significado de los datos presentados en cada pantalla.

En esta guía se examinan escenarios comunes de generación de perfiles e introduce el generador de perfiles como una herramienta para ayudar a analizar y optimizar aplicaciones iOS y Android.

Descarga e instalación

Nota:

Deberá ser un suscriptor de Visual Studio Enterprise para desbloquear esta característica en Visual Studio Enterprise en Windows o Visual Studio para Mac en un Equipo Mac.

Xamarin Profiler es una aplicación independiente y se integra con Visual Studio para Mac y Visual Studio para habilitar la generación de perfiles desde el IDE.

Descargue el paquete de instalación de la plataforma:

Una vez descargado, inicie el instalador para agregar Xamarin Profiler al sistema.

Generadores de perfiles y generación de perfiles

La generación de perfiles es un paso importante y a menudo se pasa por alto en el desarrollo de aplicaciones. La generación de perfiles es una forma de análisis dinámico de programas : analiza el programa mientras se ejecuta y está en uso. Un generador de perfiles es una herramienta de minería de datos que recopila información sobre la complejidad del tiempo, el uso de métodos concretos y la memoria que se asigna. Un generador de perfiles permite profundizar y analizar estas métricas para identificar áreas problemáticas en el código.

Al diseñar y desarrollar una aplicación, es importante no optimizar prematuramente; es decir, dedicar tiempo a desarrollar el código en áreas a las que rara vez se accederá. Esta es la potencia de la generación de perfiles. Un generador de perfiles proporciona información sobre las partes más usadas de la base de código y ayuda a localizar áreas en las que debe dedicar tiempo a realizar mejoras. Los desarrolladores deben tener cuidado de comprender dónde se invierte la mayor parte del tiempo en la aplicación y cómo usa la aplicación la memoria.

La generación de perfiles es útil en todos los tipos de desarrollo, pero es especialmente crucial en el desarrollo móvil. El código no optimizado es mucho más notable en las plataformas móviles que en los equipos de escritorio, y el éxito de la aplicación depende del código hermoso y optimizado que se ejecuta de forma eficaz.

Generador de perfiles de Xamarin

Xamarin Profiler proporciona a los desarrolladores una manera de generar perfiles de aplicaciones desde Visual Studio para Mac o Visual Studio. El generador de perfiles recopila y muestra información sobre la aplicación, que el desarrollador puede usar para analizar el comportamiento de una aplicación. Hay varias maneras diferentes de generar perfiles de una aplicación con Xamarin Profiler, es decir, la generación de perfiles de memoria y el muestreo estadístico. Estos se llevan a cabo a través de los instrumentos Allocations y Time Profiler respectivamente.

Actualmente, Xamarin Profiler se puede usar para probar aplicaciones de Xamarin.iOS, Xamarin.Android y Xamarin.Mac en Mac (a través de Visual Studio para Mac). El generador de perfiles es un proceso independiente del IDE, por lo que, además de iniciar desde Visual Studio para Mac, se puede usar como una aplicación independiente para examinar .exe y .mlpd archivos que se han generado a partir del generador de perfiles de registro mono.

Compatibilidad con profiler

La compatibilidad con Xamarin Profiler está disponible en las siguientes plataformas:

  • Visual Studio para Mac (macOS, con licencia Enterprise)

    • Android
      • Dispositivo y emulador
    • iOS
      • Dispositivo y simulador
    • tvOS (no se admite el instrumento de tiempo)
      • Dispositivo y simulador
    • Mac
  • Visual Studio (solo versión enterprise )

    • Android
      • Dispositivo y emulador
    • iOS [Experimental]
      • Dispositivo y simulador
    • tvOS
      • Dispositivo y simulador

Tenga en cuenta que solo puede generar perfiles de configuraciones de depuración .

Conceptos básicos del generador de perfiles

En esta sección se presentan las partes de Xamarin Profiler y se recorren sus características.

Permitir generación de perfiles en la aplicación

Para poder generar perfiles correctamente en la aplicación, deberá permitir la generación de perfiles en las opciones de proyecto de la aplicación.

  • iOS:

Compilación > de depuración > de iOS Habilitar generación de perfiles

Cuadro de diálogo Opciones de iOS en Visual Studio para Mac

  • Android:

Compilación > de depuración de > Android Habilitar instrumentación para desarrolladores

Cuadro de diálogo Opciones de Android en Visual Studio para Mac

Iniciar profiler

Xamarin Profiler se puede iniciar desde el IDE al generar perfiles de la aplicación iOS o Android, o como una aplicación independiente.

Inicio desde Visual Studio para Mac

  1. En primer lugar, asegúrese de que la aplicación se ha cargado en Visual Studio para Mac y seleccione la configuración de depuración (predeterminada).
  2. Vaya a Ejecutar >generación de perfiles de inicio en Visual Studio para Mac o Analizar > Xamarin Profiler en Visual Studio para abrir Profiler, como se muestra en el diagrama siguiente:

Iniciar Profiler desde Visual Studio para Mac

Si los elementos de menú no aparecen, consulte la guía de solución de problemas.

Se inicia Profiler y se inicia automáticamente la generación de perfiles de la aplicación.

Profiler se puede usar para medir la memoria y el rendimiento. Esto se logra a través de los instrumentos Allocations and Time Profiler, que exploraremos en detalle en la sección siguiente.

Guardar y cargar sesiones del generador de perfiles

Para guardar una sesión de generación de perfiles en cualquier momento, elija Guardar como > ... en la barra de menús del generador de perfiles. Esto guarda el archivo en formato mlpd , un formato especial y muy comprimido para los datos de generación de perfiles.

Una vez instalado, Xamarin Profiler puede encontrarse en la carpeta Aplicaciones, como se muestra en la captura de pantalla siguiente:

Apertura de Profiler independiente desde Mac

Puede cargar archivos .mlpd en Profiler abriendo la aplicación independiente, seleccionando Elegir destino y cargando el archivo.

Para obtener más información, vea Generar archivos .mlpd.

Características del generador de perfiles

Xamarin Profiler se compone de cinco secciones, como se muestra a continuación:

  • Barra de herramientas : ubicada en la parte superior del generador de perfiles, ofrece opciones para iniciar o detener la generación de perfiles, seleccionar un proceso de destino, ver el tiempo de ejecución de la aplicación y seleccionar las vistas divididas que componen la aplicación del generador de perfiles.
  • Lista de instrumentos: enumera todos los instrumentos cargados para la sesión de generación de perfiles.
  • Gráfico de trazado : estos gráficos se relacionan horizontalmente con los instrumentos pertinentes de la lista de instrumentos. Se puede usar un control deslizante (que se muestra debajo de Time Profiler) para cambiar la escala.
  • Área Detalle del instrumento : contiene los datos que se muestran en la vista seleccionada del instrumento actual. Veremos estas vistas con más detalle en la sección siguiente.
  • Vista inspector : contiene secciones que el control segmentado puede seleccionar. Las secciones dependen del instrumento seleccionado e incluyen: Configuración, Estadísticas, Información de seguimiento de pila y Ruta de acceso a raíces.

Asignaciones

El instrumento de asignaciones proporciona información detallada sobre los objetos de la aplicación a medida que se crean y se recopilan elementos no utilizados.

En la parte superior del generador de perfiles se encuentra el gráfico de asignaciones, que muestra la cantidad de memoria asignada a intervalos regulares durante la generación de perfiles. Actualmente, el gráfico de asignaciones es el número total de asignaciones y NO el tamaño del montón en ese momento. En cierto sentido, nunca bajará, solo aumentará. Esto incluye los objetos asignados en la pila. Dependiendo de la versión en tiempo de ejecución usada, el gráfico puede ser diferente, incluso para la misma aplicación.

Hay diferentes vistas de datos en el instrumento Asignaciones, que permiten a los desarrolladores analizar cómo su aplicación usa y libera memoria. Estas vistas se describen a continuación:

  • Asignaciones : muestra una lista de todas las asignaciones y las agrupa por nombre de clase. Esto proporciona una excelente introducción a las clases y métodos que se usan, la frecuencia con la que se usan y el tamaño colectivo de las clases usadas. Al hacer doble clic en una clase, se mostrará la memoria asignada :

La vista Inspector para asignaciones proporciona opciones para filtrar y agrupar objetos, proporcionar estadísticas sobre la memoria asignada y las asignaciones principales, así como vistas para seguimiento de pila y ruta de acceso a raíz.

  • Árbol de llamadas: muestra todo el árbol de llamadas de todos los subprocesos de la aplicación e incluye información sobre la memoria asignada en cada nodo. Cuando se selecciona un elemento en la lista, todos los nodos del mismo nivel aparecerán grises. Puede expandir el árbol o hacer doble clic en el elemento para explorarlo en profundidad. Al mostrar esta vista de datos, se puede usar la vista del inspector de configuración de visualización para cambiar la forma en que se presenta. Actualmente hay dos opciones:
    1. Árbol de llamadas invertido : considera el seguimiento de la pila de arriba abajo. Se trata de una opción de vista cómoda, ya que indica los métodos más profundos en los que la CPU ha pasado su tiempo.
    2. Independiente por subproceso : esta opción organiza el árbol de llamadas por subproceso.
  • Instantáneas : este panel muestra información sobre las instantáneas de memoria. Para generarlos durante la generación de perfiles de una aplicación activa, haga clic en el botón Cámara de la barra de herramientas en cada punto que le gustaría ver qué memoria se conserva y libera. A continuación, puede hacer clic en cada instantánea para explorar lo que sucede en segundo plano. Tenga en cuenta que las instantáneas solo se pueden tomar cuando se genera una generación de perfiles dinámica de una aplicación.

Generador de perfiles de tiempo

El instrumento Time Profiler mide exactamente cuánto tiempo se invierte en cada método de una aplicación. La aplicación se pausa a intervalos regulares y se ejecuta un seguimiento de pila en cada subproceso activo. Cada fila del área Detalles del instrumento muestra la ruta de acceso de ejecución que se ha seguido.

El gráfico de trazados, como se muestra en la captura de pantalla siguiente, muestra el número de muestras recibidas por la aplicación a medida que se ejecuta:

  • Árbol de llamadas : muestra la cantidad de tiempo invertido en cada método:

Cycles

Mediante el uso de código administrado de C# y F#, puede ser bastante común y, desafortunadamente, bastante fácil crear referencias a objetos que nunca se eliminarán. Este instrumento permite identificar esos objetos y mostrar los ciclos a los que se hace referencia en la aplicación.

Aplicaciones de generación de perfiles

Actualmente, solo se pueden generar perfiles de las configuraciones de depuración predeterminadas.

Si perfila una aplicación con cualquier otra configuración, aparecerá el siguiente cuadro de diálogo de mensaje:

Seleccione Actualizar para continuar.

Recolector de elementos no utilizados de SGen y generación de perfiles

El recolector de elementos no utilizados de SGen se usa para todas las plataformas de Xamarin.

SGen es un GC generacional, que asigna objetos de una aplicación en tres montones: vivero, montón principal y espacio de objetos grandes. Esto permite una ejecución más rápida de la recolección de elementos no utilizados. SGen es actualmente el GC predeterminado para Xamarin.Android y las aplicaciones unificadas de Xamarin.iOS.

La aplicación Xamarin.iOS mediante la API clásica usó el GC de Boehm: un recolector de elementos no utilizados conservador y no generacional. Como es conservador, es menos probable liberar memoria disponible, lo que puede provocar resultados inexactos al usar el generador de perfiles. Por este motivo, el instrumento asignaciones no se puede utilizar con el recolector de elementos no utilizados de Boehm.

Aunque se le pedirá un cuadro de diálogo de mensaje si la aplicación usa el GC de Boehm, Xamarin no recomienda cambiar la aplicación iOS existente que use Boehm a SGen sin una investigación cuidadosa y pruebas exhaustivas. Xamarin tampoco recomienda cambiar a SGen para la generación de perfiles y, a continuación, volver a cambiar, ya que estos resultados no proporcionarán pruebas comparativas precisas del uso de memoria.

Para obtener más información sobre la administración de memoria, consulte la guía Procedimientos recomendados de memoria y rendimiento .

Resumen

En esta guía hemos visto qué es la generación de perfiles y cómo es ventajoso para el desarrollador. A continuación, presentamos Xamarin Profiler, que proporciona información e historial sobre cómo funciona. Por último, hemos recorrido las características de Xamarin Profiler y exploramos los instrumentos de asignación y generador de perfiles de tiempo.