Compartir
Contenidos contratados por la marca que se menciona

Visual Studio 2015: Detectando problemas con mayor facilidad con PerfTips y la herramienta de diagnóstico

Visual Studio 2015: Detectando problemas con mayor facilidad con PerfTips y la herramienta de diagnóstico
Guardar
0 Comentarios
Publicidad

Newsletter

Entusiasmo y ganas desarrollando una aplicación, llega el día clave, el momento esperado y se publica. Algunas horas más tarde nos reportan problemas de rendimiento, consumos de memoria o CPU elevados o incluso tiempos de carga y espera por encima de lo deseado.

Por encima de cuidar detalles como la funcionalidad o la estética de nuestra aplicación, tenemos que lograr un objetivo que parece simple pero que a veces se escapa, nuestra aplicación debe funcionar correctamente bajo todas las condiciones en todos los dispositivos para la que sea lanzada. En ocasiones, puntos como el consumo de memoria, CPU o la gestión de tiempos, se escapan. Un problema importante pero ni directo, no se obtienen errores directos ni tampoco problemas visuales o de otra índole sencillos de capturar. ¿El problema invisible?

PerTips

En cada nueva versión de Visual Studio las herramientas de análisis de rendimiento y de diagnóstico han ido mejorando. Sin embargo, en la mayoría de ocasiones los desarrolladores centran su atención en conseguir su aplicación funcional dejando un poco de lado la preocupación por la optimización y rendimiento. Sí que suele interesar conocer y mejorar el rendimiento del código, pero normalmente solo se abren las herramientas de diagnóstico cuando hay problemas de rendimiento, es decir, tarde.

En estos casos, además de utilizar las herramientas de diagnóstico, se tiende a:

  • Añadir líneas de código (System.Diagnostics.Stopwatch) para poder conocer puntos problemáticos en el código.
  • Añadir puntos de ruptura en puntos donde se desea ver tiempos aproximados de ejecución. Suelen ser bucles con grandes iteraciones o con acciones repetidas de peso.

Las prácticas anteriores, aunque muestran grandes intenciones, no suelen ser muy exactas. Se incluye el tiempo extra añadido por el debugger, errores de percepción y otros detalles que restan exactitud en las mediciones.

Precisamente con este objetivo nace PerfTips, para ayudar a los desarrolladores a entender que ocurre en su aplicación a nivel de rendimiento mientras depura. Añadiendo puntos de ruptura en el código, aparecerán PerfTips, es decir, mensajes (tooltips) con información relacionada con el rendimiento (performance). De forma sencilla, sin necesidad de nuevos conocimientos o de ejecutar herramientas independientes podremos tener información de rendimiento de la aplicación.

Perftips 01

Sencillamente depurando podemos detectar con facilidad problemas de rendimiento en el código.

Perftips 02

Cuando hacemos clic sobre el enlace del PerfTip navegamos a la herramienta de diagnóstico.

Herramientas De Diagnostico

NOTA: PerfTips indica tiempos utilizando <=. Es un tiempo aproximado excluyendo la mayor cantidad posible de los tiempos de pausa en un punto de ruptura así como la carga de símbolos o el overhead incluido por el debugger.

Herramientas de diagnóstico

Las herramientas de diagnóstico son un conjunto de ventanas de información relacionadas con el rendimiento de la aplicación. Incluye opciones para:

  • Ver problemas de renderizado en la aplicación.
  • Monitorear consumo de Memoria y CPU.
  • Monitorear frames por segundo.
  • Detectar problemas en el consumo de red.

Entre otras opciones destinadas a detectar problemas en la aplicación en diversas vías. La información facilitada por la herramienta siempre viene dada en dos modos complementarios, visual en formato gráfico e información detallada. En la parte superior contamos con la parte más visual cuyo objetivo es trasmitir estado general de forma rápida mientras que en la parte inferior se puede ver la información de forma mucho más detallada. Con la herramienta de diagnóstico tenemos tres apartados diferentes; la línea de tiempo, uso de memoria y uso de CPU. Podemos habilitar o deshabilitar fácilmente los apartados de memoria o CPU.

Herramientas De Diagnostico 02

Línea de tiempo

Gracias a estas gráficas podemos detectar problemas de rendimiento relacionados con el layout de la aplicación.

Linea De Tiempo

Procesos de parsing, renderizado, caídas en los frames por segundo son detalles que podemos extraer utilizando este apartado.

Consumo de CPU

En cada sesión de depuración podemos ver el uso de CPU de la aplicación en cada uno de los núcleos disponibles en el dispositivo.

Consumo Cpu

Indica que partes del código consumen más CPU, sumatorios y porcentajes de cada stacks (.NET & C++).

Consumo de memoria

La herramienta de consumo de memoria monitorea el consumo de memoria de la aplicación mientras estamos depurando. Nos permite detectar e investigar problemas y fugas de memoria.

Consumo Memoria

De forma muy visual se pueden observar picos de memoria o si la aplicación comienza a superar los límites establecidos o deseados. Se pueden tomar snapshots para poder comparar dos líneas temporales, por ejemplo, antes y después de realizar alguna acción. De esta forma se puede ver incremento en objetos, consumo y detalles que nos ayuden a detectar aquellos puntos del código que podemos mejorar.

Utilizando PerfTips

Para ver con más detalle el uso de PerfTips y cómo nos permite detectar problemas de rendimiento según depuramos nuestra aplicación, vamos a tomar una aplicación universal Windows como ejemplo. En este ejemplo se cargan un listado de imágenes desde internet.

La parte importante de nuestra aplicación es sin duda la carga inicial de las imágenes. A simple vista, nuestra sensación es que la carga inicial es algo lenta, permitimos ver momentáneamente la aplicación sin imágenes.

App Imagenes

Nos centramos en el código de carga de las imágenes.

Perftips 03

Se obtienen las imágenes, se filtran por formato suprimiendo las no válidas y se cargan. A simple vista, si no detectamos nada con PerfTips, de hecho si no lo tuviésemos como hasta ahora, probablemente nada haría detener nuestra atención en esto. Si depuramos ese trozo de código tan simple, nos damos cuenta que tenemos un gran problema.

Perftips 04

Visto esto, añadimos más puntos de ruptura, y volvemos a depurar desde el inicio moviendo el punto de ruptura actual al principio, arrastrándolo y soltándolo.

Perftips

Obtener las imágenes no es parte del problema. Continuamos.

Perftips

En el filtrado de las imágenes ya vemos una cantidad de tiempo excesivamente elevada. Entrando en detalles, el filtrado utiliza un Helper que a simple vista no nos indica nada problemático.

Perftips 05

El problema sin duda, debe estar en ese método del Helper. Entrando de lleno, vemos un bucle que recorre las fotos tomadas y se verifica una a una sí cumple con el formato deseado.

Perftips 06

Ponemos puntos de ruptura y comprobamos tiempos.

Perftips 07

Vemos que la mayor cantidad de tiempo por cada iteración es consumido por la validación de imágenes. Gracias a las herramientas de diagnóstico podemos ver también un uso muy bajo de CPU.

Perftips 08

Podemos hacer una modificación simple añadiendo Parallel para aprovechar mejor la capacidad de múltiples núcleos.

Perftips 09

Depuramos de nuevo para verificar nuestro cambio. Vemos una leve mejora en los tiempos. De la depuración anterior vimos donde radicaba posiblemente el mayor problema, en la validación de cada imagen. Nos centramos en ese código, depuramos y vemos la mayor cantidad de pérdida de tiempo.

Perftips 10

Depurando vemos pérdida de tiempo en una petición http, un proceso de validación de cabeceras del array de bytes de la imagen obtenida que también es costoso y en general un proceso complejo que podemos simplificar. Modificamos el método de validación por una validación de formato simple y volvemos a depurar el proceso.

Perftips 11

Hemos conseguido directamente depurando el código, sin necesidad de herramientas externas, detectar un problema de rendimiento y reducir la carga de imágenes de 35 segundos aproximados a 9 milisegundos donde otros aspectos como el consumo de memoria también se han visto beneficiado.

NOTA: El ejemplo es claramente intencionado para mostrar de forma muy visual y especifica las ventajas aportadas por PerfTips.

Conclusiones

Podemos ver PerfTips en acción en el siguiente video.

PerfTips nos permite analizar y mejorar iterativamente el rendimiento de la aplicación en el mismo proceso de depuración, sin necesidad de configuraciones o de herramientas externas.

A nosotros nos parece novedad sencilla, potente y versátil incluida en Visual Studio 2015, ¿y a vosotros?

En Visual Studio

: * Repasamos las posibilidades del emulador Android incluido en Visual Studio 2015. * Depurar código en producción con Intellitrace de Visual Studio 2015. * Visual Studio para Dummies.

Publicidad

También te puede gustar

Comentarios cerrados

Ver más artículos