Planeamiento y medición del rendimiento de la aplicación

Los usuarios esperan que sus aplicaciones sigan respondiendo, que se sientan naturales y que no desagüen la batería. Técnicamente, el rendimiento es un requisito no funcional, pero el tratamiento del rendimiento como una característica le ayuda a ofrecer las expectativas de los usuarios. Especificar objetivos y medir los resultados: estos son factores clave. Determine sus escenarios críticos para el rendimiento, defina qué se considera un buen rendimiento y, a continuación, mida desde el principio y con frecuencia a lo largo del ciclo de vida de su proyecto para asegurarse de que alcanzará sus objetivos.

Especificar objetivos

La experiencia del usuario es una manera básica de definir un buen rendimiento. El tiempo de inicio de una aplicación puede influir en la percepción de un usuario de su rendimiento. Un usuario podría considerar que un tiempo de inicio de la aplicación de menos de un segundo es excelente, menos de cinco segundos para ser bueno y superior a cinco segundos para ser deficiente.

Otras métricas tienen un impacto menos obvio en la experiencia del usuario, como la memoria. Las probabilidades de que una aplicación sea finalizada mientras está suspendida o inactiva aumentan con la cantidad de memoria que usa la aplicación activa. El uso elevado de memoria degrada la experiencia de todas las aplicaciones del sistema, por lo que tener un objetivo de consumo de memoria es razonable.

Establezca objetivos iniciales específicos y medibles. Deben estar en tres categorías:

  • Tiempo : cuánto tiempo tardan los usuarios o la aplicación en completar las tareas.
  • Fluidez : velocidad y continuidad con la que la aplicación se vuelve a dibujar en respuesta a la interacción del usuario
  • Eficiencia: la forma en que la aplicación conserva los recursos del sistema, incluida la energía de la batería

Time

Piense en intervalos aceptables de tiempo transcurrido (clases de interacción) para que los usuarios completen sus tareas.

Clase de interacción Percepción del usuario Ideal Maximum Ejemplos
Rápido Retraso mínimamente notable 100 ms 200 ms Abra la barra de la aplicación; Presione un botón (primera respuesta)
Típica Rápido, pero no rápido 300 ms 500 ms Cambio de tamaño; zoom semántico
Respuesta correcta No es rápido, pero se siente ágil 500 ms 1 segundo Vaya a otra página; reanudar la aplicación
Lanzamiento Experiencia competitiva 1 segundo 3 segundos Iniciar la aplicación por primera vez
Continuo Ya no se siente con capacidad de respuesta 500 ms 5 segundos Descargar un archivo desde Internet
Cautivo Largo; el usuario podría cambiar a otra pantalla 500 ms 10 segundos Instalar varias aplicaciones desde la Tienda

Asigne clases de interacción a los escenarios de rendimiento de la aplicación. Para cada escenario, asigne la referencia a un momento dado de la aplicación, una parte de la experiencia del usuario y una clase de interacción.

Fluidez

Los objetivos de fluidez medibles específicos para la aplicación pueden incluir:

  • Sin interrupciones ni tirones al redibujar la pantalla
  • Las animaciones se representan en 60 fotogramas por segundo (FPS)
  • Cuando un usuario se mueve lateralmente o se desplaza, la aplicación muestra 3–6 páginas de contenido por segundo

Efficiency

Los objetivos específicos de eficiencia medible para la aplicación pueden incluir:

  • El porcentaje de CPU de su aplicación es igual o inferior a un valor objetivo y el uso de memoria en MB es igual o inferior a un valor objetivo en todo momento.
  • Cuando la aplicación está inactiva, el uso de CPU y memoria es mínimo
  • La aplicación puede usarse activamente durante un número objetivo de horas con la batería.

Diseño de la aplicación para el rendimiento

Usa tus objetivos de rendimiento para influir en el diseño de la aplicación. Tenga en cuenta estos aspectos:

UI

  • Maximiza el tiempo de análisis y carga y la eficacia de memoria de cada página optimizando el marcado XAML. Aplazar la carga de la interfaz de usuario y el código hasta que sea necesario.
  • Para ListView y GridView, convierta todos los elementos en el mismo tamaño y usen tantas técnicas de optimización como pueda.
  • Defina la interfaz de usuario mediante marcado en lugar de construirla de forma imperativa mediante código.
  • Retrasar la creación de elementos de la interfaz de usuario hasta que el usuario los necesite mediante el atributo x:Load .
  • Prefiere transiciones de tema y animaciones a animaciones con guion gráfico. Las animaciones con guion gráfico requieren actualizaciones constantes en la pantalla y mantienen activa la canalización de CPU y gráficos.
  • Cargue imágenes con un tamaño adecuado para la vista en la que los presenta.

CPU, memoria y energía

  • Planifique las tareas menos prioritarias en subprocesos de menor prioridad. Consulte Programación asincrónica y la clase DispatcherQueue .
  • Minimice la superficie de memoria de la aplicación liberando recursos costosos (como medios) cuando no sean necesarios.
  • Evite pérdidas de memoria anulando el registro de controladores de eventos y desreferenciando elementos de la interfaz de usuario siempre que sea posible.
  • Para ahorrar batería, sea prudente con la frecuencia con la que solicita datos, consulta un sensor o programa tareas en la CPU cuando esta está inactiva.

Acceso a datos

  • Si es posible, captura previa del contenido.
  • Almacenar en caché el contenido que es costoso de acceder.
  • En caso de fallos de caché, muestre lo antes posible una interfaz de marcador de posición que indique que la aplicación sigue cargando contenido.

Instrumento para el rendimiento

Al codificar, agregue código que registra mensajes y eventos en determinados puntos mientras se ejecuta la aplicación. Más adelante, usa herramientas de generación de perfiles como Windows Grabadora de rendimiento y Windows Analizador de rendimiento (ambos incluidos en el Windows Performance Toolkit) para crear y ver un informe sobre el rendimiento de la aplicación.

Windows proporciona API de registro respaldadas por el seguimiento de eventos para Windows (ETW) que ofrecen una solución enriquecida de registro y seguimiento de eventos. Las API del espacio de nombres Windows.Foundation.Diagnostics incluyen las clases FileLoggingSession, LoggingActivity, LoggingChannel y LoggingSession.

// using Windows.Foundation.Diagnostics;

LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage("Here's my logged message.", LoggingLevel.Information);

Para registrar los eventos de inicio y parada durante un período de tiempo:

LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
LoggingActivity myLoggingActivity;

using (myLoggingActivity = new LoggingActivity("MyLoggingActivity", myLoggingChannel))
{
    // A start event is logged when the activity begins.
    // Add code here to do something of interest.
}
// An end event is logged when the activity ends.

Prueba y medición con respecto a los objetivos de rendimiento

Utiliza estas técnicas y herramientas para comprobar cómo se compara tu aplicación con tus objetivos de rendimiento:

  • Prueba con una amplia variedad de configuraciones de hardware, incluidos equipos de escritorio, portátiles, ultrabooks y tabletas.
  • Prueba con una amplia variedad de tamaños de pantalla. Las pantallas más amplias muestran más contenido, lo que puede afectar negativamente al rendimiento.
  • Elimine tantas variables de prueba como pueda:
    • Desactive las aplicaciones en segundo plano en el dispositivo de prueba.
    • Compile la aplicación en la configuración de versión antes de implementarla en el dispositivo de prueba.
    • Ejecute la aplicación varias veces para ayudar a eliminar las variables de prueba aleatorias y garantizar medidas coherentes.
  • Prueba para reducir la disponibilidad de energía. Los dispositivos de los usuarios pueden tener una potencia significativamente menor que la máquina de desarrollo.
  • Use una combinación de herramientas como Visual Studio herramientas de diagnóstico y Windows Analizador de rendimiento para medir el rendimiento de la aplicación.

Respuesta a los resultados de las pruebas de rendimiento

Después de analizar los resultados de la prueba de rendimiento, determine si se necesitan cambios:

  • ¿Debe cambiar las decisiones de diseño de la aplicación o optimizar el código?
  • ¿Debería añadir, eliminar o cambiar la instrumentación en el código?
  • ¿Debería revisar los objetivos de rendimiento?

Si se necesitan cambios, realicelos y vuelvan a instrumentar o probar.

Optimize

Optimice solo las rutas de ejecución del código críticas para el rendimiento de su aplicación: aquellas en las que se emplea más tiempo. El perfilado te indica cuáles son esas áreas. A menudo, hay una disyuntiva entre las buenas prácticas de diseño y el código que ofrece el máximo nivel de optimización. Priorice la productividad del desarrollador y el buen diseño de software en áreas en las que el rendimiento no sea un problema.