Generador de perfiles de Xamarin

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

El éxito de una aplicación depende de la experiencia del usuario final. Como desarrollador, puede que haya implementado algunas características realmente increíbles en su aplicación, pero si esta es lenta o se bloquea constantemente, es probable que el usuario se deshaga de ella.

Tradicionalmente, Mono ha ofrecido 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 aplicaciones Android, iOS y tvOS en Windows.

Xamarin Profiler cuenta con varios instrumentos para la generación de perfiles: Asignaciones, Ciclos y Generador de perfiles de tiempo. En esta guía, se explora qué miden dichos instrumentos y cómo analizan la aplicación, y se clarifica el significado de los datos que se presentan en cada pantalla.

Además, se examinan escenarios comunes de generación de perfiles y se presenta el generador de perfiles como herramienta que ayuda a analizar y optimizar aplicaciones iOS y Android.

Descarga e instalación

Nota:

Debe ser suscriptor de Visual Studio Enterprise para desbloquear esta característica en Visual Studio Enterprise en Windows o en Visual Studio para Mac en un dispositivo Mac.

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

Descargue el paquete de instalación para su plataforma:

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

Generadores y generación de perfiles

La generación de perfiles es un paso importante en el desarrollo de aplicaciones que, a menudo, se pasa por alto. 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 temporal, el uso de métodos concretos y la memoria que se asigna. Le permite profundizar en estas métricas y analizarlas para identificar áreas problemáticas del código.

Al diseñar y desarrollar una aplicación, es importante no optimizarla de forma precipitada; es decir, dedicar tiempo a desarrollar el código en áreas a las que rara vez se accederá. Este es el potencial de la generación de perfiles. Un generador de perfiles proporciona información sobre las partes que más se usan de la base de código y ayuda a localizar las áreas en las que debería invertir más tiempo a realizar mejoras. Los desarrolladores deben preocuparse por entender dónde se emplea la mayor parte del tiempo en la aplicación y cómo utiliza esta la memoria.

La generación de perfiles es útil en todos los tipos de desarrollo pero, sobre todo, es fundamental en el desarrollo móvil. El código no optimizado es mucho más perceptible en las plataformas móviles que en los equipos de escritorio y el éxito de la aplicación depende de contar con código atractivo y optimizado que se ejecute de forma eficaz.

Generador de perfiles de Xamarin

Xamarin Profiler proporciona a los desarrolladores una forma de crear perfiles de las aplicaciones desde dentro de 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 esta. Hay varias formas distintas de generar perfiles de una aplicación con Xamarin Profiler, es decir, la generación de perfiles de memoria y el muestreo estadístico. Se llevan a cabo a través de los instrumentos Asignaciones y Generador de perfiles de tiempo, 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 que, además de iniciarse desde Visual Studio para Mac, se puede usar como aplicación independiente para examinar archivos .exe y .mlpd producidos desde el generador de perfiles de registro mono.

Compatibilidad con el generador de perfiles

Las siguientes plataformas tienen compatibilidad con Xamarin Profiler:

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

    • Android
      • Dispositivo y emulador
    • iOS
      • Dispositivo y simulador
    • tvOS (no se admite el instrumento temporal)
      • Dispositivo y simulador
    • Mac
  • Visual Studio (solo la 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.

Aspectos básicos de Profiler

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

Permitir la generación de perfiles en la aplicación

Para poder generar perfiles de su aplicación correctamente, debe permitir la generación de perfiles en las opciones del proyecto de la aplicación.

  • iOS:

Compilar > Depuración para iOS > Habilitar generación de perfiles

iOS Options Dialog in Visual Studio for Mac

  • Android:

Compilar > Depuración de Android > Habilitar instrumentación de desarrollador

Android Options Dialog in Visual Studio for Mac

Inicio de Profiler

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

Inicio desde Visual Studio para Mac

  1. Primero, asegúrese de que tiene su aplicación cargada en Visual Studio para Mac y seleccione la configuración de depuración (predeterminada).
  2. Vaya a Ejecutar > Iniciar generación de perfiles en Visual Studio para Mac, o Analizar > Xamarin Profiler en Visual Studio, para abrir Profiler, como se muestra en el diagrama siguiente:

Launching the Profiler from Visual Studio for Mac

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

De esta forma, Profiler se abre e inicia la generación de perfiles de la aplicación de forma automática.

Profiler se puede usar para medir la memoria y el rendimiento. Esto se consigue a través de los instrumentos Asignaciones y Generador de perfiles de tiempo, que exploraremos en detalle en la sección siguiente.

Guardar y cargar sesiones de Profiler

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

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

Open standalone Profiler from Mac

Puede cargar archivos .mlpd en Profiler; para ello, abra la aplicación independiente al seleccionar Elegir destino y cargue el archivo.

Para obtener más información, consulte Generación de archivos .mlpd.

Características de Profiler

Xamarin Profiler consta de cinco secciones, tal y como se muestra a continuación:

  • Barra de herramientas: se encuentra en la parte superior del generador de perfiles y 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 en dos paneles 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 diagrama: 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 Generador de perfiles de tiempo) para cambiar la escala.
  • Área de detalles del instrumento: contiene los datos que muestra la vista seleccionada del instrumento actual. En la sección siguiente, analizaremos estas vistas con más detalle.
  • Vista de inspector: contiene secciones que el control segmentado puede seleccionar. Las secciones dependen del instrumento seleccionado e incluyen: opciones de configuración, estadísticas, información de seguimiento de la 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 recolectan los 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 modo, nunca se reducirá, solo aumentará. Incluye los objetos asignados en la pila. Según la versión del entorno de ejecución que se use, el gráfico puede tener un aspecto diferente, incluso para la misma aplicación.

El instrumento Asignaciones cuenta con distintas vistas de datos, lo que permite a los desarrolladores analizar cómo usa y libera memoria su aplicación. Estas vistas se describen a continuación:

  • Asignaciones: muestra una lista de todas las asignaciones y las agrupa por nombre de clase. Proporciona una presentación excelente de las clases y los métodos que se usan, la frecuencia con la que se utilizan y el tamaño colectivo de las clases utilizadas. Al hacer doble clic en una clase, se muestra la memoria asignada:

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

  • Árbol de llamadas: muestra el árbol de llamadas completo 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 relacionados aparecen en gris. 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 de 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. Esta es una opción de visualización conveniente, ya que indica los métodos más profundos en los que la CPU ha estado invirtiendo su tiempo.
    2. Separar 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 generarlas 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 en el que quiera ver qué memoria se conserva y se libera. A continuación, puede hacer clic en cada instantánea para explorar qué sucede en segundo plano. Tenga en cuenta que solo se pueden tomar instantáneas al generar perfiles en directo de una aplicación.

Generador de perfiles de tiempo

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

El gráfico de diagrama, como se muestra en la captura de pantalla siguiente, presenta el número de muestras recibidas por la aplicación mientras se ejecuta:

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

Cycles

Al usar código administrado de C# y F#, es bastante común y, lamentablemente, 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.

Generación de perfiles de aplicaciones

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

Si genera perfiles de 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 Xamarin.

SGen es un recolector de elementos no utilizados (GC) generacional que asigna objetos de una aplicación a tres montones: Nursery, Major Heap y Large Object Space. Esto permite una ejecución más rápida de la recolección de elementos no utilizados. SGen es actualmente el GC predeterminado de las aplicaciones unificadas de Xamarin.iOS y Xamarin.Android.

Las aplicaciones de Xamarin.iOS que usan Classic API usaban el GC de Boehm: un recolector de elementos no utilizados moderado y no generacional. Al ser moderado, es menos probable que libere memoria disponible, lo que puede dar lugar a resultados inexactos cuando se use el generador de perfiles. Por esta razón, el instrumento Asignaciones no se puede usar con el recolector de elementos no utilizados de Boehm.

Aunque se le mostrará un cuadro de diálogo de mensaje si la aplicación usa el GC de Boehm, Xamarin no recomienda cambiar a SGen una aplicación de iOS existente que use Boehm sin investigarlo detenidamente y realizar pruebas exhaustivas. Xamarin tampoco recomienda cambiar a SGen para la generación de perfiles para después volver a cambiar, ya que estos resultados no proporcionarán puntos de referencia precisos del uso de la memoria.

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

Resumen

En esta guía, hemos visto qué es la generación de perfiles y qué ventajas ofrece a los desarrolladores. Después, hemos presentado Xamarin Profiler, con algo de su historia e información sobre su funcionamiento. Por último, hemos recorrido las características de Xamarin Profiler y se han explorado los instrumentos de Asignaciones y Generador de perfiles de tiempo.