2017-05-07 2 views
-1

Je veux suivre l'heure et le temps de démarrage pour certaines opérations de mon application sur android. J'utilise l'approche des marqueurs de code pour mesurer le temps de toutes les opérations de base dans mon application. J'ai inséré des marqueurs de code à différents endroits dans le code. J'enregistre l'heure du système chaque fois qu'un marqueur de code est atteint. Et puis je prends la différence de temps entre les marqueurs de début et de fin pour mesurer le temps de démarrage et d'autres opérations.Quelles sont les raisons de la variance dans la mesure de la performance de l'application Android

Je reçois une certaine variance en l'espace de millisecondes chaque fois que je mesure l'heure d'un scénario. Par exemple, si je mesure le temps de démarrage en 10 itérations, j'obtiens des valeurs différentes dans la plage de 1400 ms à 1600 ms à chaque fois. En raison de cette variation dans les lectures, je ne suis pas toujours sûr à 100% si mon changement a une incidence sur le temps de démarrage et d'autres opérations.

Pour autant que je sache, la variance peut être due aux raisons suivantes:

  1. mise à l'échelle de fréquence du processeur par le noyau Linux. J'ai donc désactivé la mise à l'échelle et mis le scaling_governor à la performance.
  2. Utilisation des ressources en raison d'autres processus s'exécutant sur le périphérique. J'ai éliminé cela aussi. J'utilise le système d'exploitation Android, sans applications externes. Et avant d'exécuter les tests, je redémarre d'abord mon appareil. Donc, chaque fois que j'exécute mon test, le même jeu d'applications fonctionne sur mon appareil.
  3. Différents niveaux de batterie. J'effectue toujours mes tests lorsque mon téléphone est chargé à 100% et qu'il est branché.
  4. Je prends également les mesures sur un même appareil à chaque fois. J'ai un appareil dédié pour cette tâche.

Quelles peuvent être les autres raisons de la variance dans la mesure du rendement? Existe-t-il une meilleure façon de mesurer les performances?

+0

[ Java] (http://t.qkme.me/35x9qk.jpg) – Jakuje

Répondre

0

Les performances de l'application peuvent varier pour plusieurs raisons. Par exemple,

  1. Conserver les données souvent demandées dans des caches par CPU.

  2. Mise en cache de fichiers par Dalvik/ART runtime.

  3. Depuis Android exécute plusieurs processus en même temps. D'autres processus peuvent être exécutés entre les phases d'exécution de votre programme.

  4. La récupération de place peut interrompre l'exécution à tout moment pour analyser la mémoire.

Ces facteurs externes auront une incidence sur les mesures de votre temps, en dérobant temps CPU, attacher les canaux d'E/S, etc. Vous devez en moyenne vos tests sur plusieurs pistes pour essayer de moyenner ces facteurs externes, et la précision/précision en souffrira. Une discussion utile pour obtenir l'heure précise pendant l'exécution de la mesure est discutée dans Best method to measure execution time in Android?. En dehors de cela, les performances peuvent également varier du côté de l'application. Par exemple,

  1. L'application initialise un grand nombre d'objets dans le processus de lancement.

  2. App est en train de faire quelques opérations lourdes dans le cycle de vie de l'activité à partir méthodes - onCreate(), onStart() ou onResume()

  3. mise en page est trop riche et/ou trop compliqué à mesurer et d'en tirer pour la première fois.

Pour voir comment performant sont les opérations les plus courantes telles que l'initialisation de l'objet ou les méthodes du cycle de vie d'activité, vous pouvez utiliser AndroidDevMetrics

enter image description here

Vérifiez aussi, Using Traceview from Android Studio

enter image description here

+0

Ce que vous annoncez peut être Les raisons pour lesquelles votre application est lente Si une application initialise beaucoup d'objets lors du lancement, elle le fera chaque fois que vous l'exécuterez. Comment comptez-vous la variance dans le temps de démarrage de l'application en raison de cela? Mon application prend 1400 ms si je l'exécute une fois, alors que cela prend 1500 ms si je l'exécute à nouveau. Comment expliquez-vous cela? –

+0

Utilisez-vous Instant Run? –

+0

non Exécution instantanée. Mon application est déjà installée sur mon appareil. Je suis juste en train de l'exécuter plusieurs fois et de mesurer le temps qu'il faut pour démarrer. Je reçois une certaine variance dans les résultats. –