web-dev-qa-db-fra.com

Comment profiler l'utilisation et les performances de la mémoire avec des instruments?

De tous les modèles de trace d'instruments, j'adore utiliser:

  • Zombies pour détecter où un objet est sur-publié, idéal pour le débogage EXEC_BAD_ACCESS les erreurs.
  • Fuites pour détecter les fuites de mémoire.
  • Animation de base avec couches mélangées de couleurs pour détecter la fréquence d'images et les sous-vues translucides, idéal pour lisser le défilement UITableView.

J'entends toujours des gens dire de profiler l'utilisation et les performances de la mémoire de mon application.

  1. Pourquoi devrais-je profiler l'utilisation et les performances de la mémoire? Mon application fonctionne bien.
  2. Comment fait-on ça?

J'ai utilisé des allocations et je constate que mon application iPhone commence à 1 Mo de mémoire totale allouée et atteint 5 Mo après une utilisation normale. Quelle est l'utilisation trop importante de la mémoire sur l'iPhone? iPad? Mac?

52
ma11hew28

Pour répondre aux pourquoi, le profilage de l'utilisation de la mémoire est particulièrement important pour les applications iOS car les iPhones et iPads ont beaucoup moins RAM que les Macs. L'iPhone 4 a 512 Mo de RAM, mais les versions antérieures en avaient 256 ou 128 Mo. Prenez en compte le RAM que le système d'exploitation utilise et le multitâche, et votre application n'a pas beaucoup RAM à gaspiller, il est donc important de savoir combien mémoire utilisée par votre application.

Le profilage des performances est quelque chose que vous faites habituellement lorsque votre application s'exécute lentement. Profilez-le pour trouver les zones lentes dans votre code afin de pouvoir exécuter le code plus rapidement. Si votre application fonctionne correctement, vous n'avez pas vraiment besoin de profil pour les performances.

Pour répondre aux questions, utilisez l'instrument Allocations pour mesurer l'utilisation de la mémoire. La colonne Live Bytes de la catégorie All Allocations vous indique la quantité de mémoire que votre application utilise actuellement. L'analyse de la mémoire de l'instrument Allocations mesure la croissance de la mémoire dans votre application. Utilisez le menu sur le côté gauche de la barre de saut pour effectuer une analyse de la photo.

L'instrument Time Profiler profile votre application pour les performances. La partie difficile de l'utilisation de l'instrument Time Profiler est l'interprétation des résultats. L'instrument Time Profiler ne vous dira pas que votre application passe 75% de son temps dans la fonction X. Vous devez fouiller dans les données pour trouver les zones lentes dans votre code.

En ce qui concerne l'utilisation de la mémoire acceptable, cela dépend des appareils que vous souhaitez prendre en charge et de l'application. Une application comme Xcode utilisant 100 Mo de RAM serait OK, mais une application comme TextEdit utilisant 100 Mo pour un document d'une page serait un problème. 5 Mo ne devrait pas être un problème pour un Application iOS.

76
Mark Szymczyk

Pour répondre à certains des commentaires de la réponse de Mark:

Les allocations d'octets vivants n'incluent pas la mémoire de texture OpenGL, qui est utilisée par CALayer/UIViews. C'est la source du désaccord avec le moniteur de mémoire.

Voir la réponse à cette question ici: Comprendre la consommation de mémoire sur iPhone

7
Calvin

La mémoire vraiment chargée dans la mémoire physique de l'appareil est le Resident Memory dans VM Tracker Instrument.

Allocation Instrument marque uniquement la mémoire créée par malloc/[NSObject alloc] et certains tampons d'infrastructure, par exemple, le bitmap de l'image décompressée n'est pas inclus dans Allocation Instrument mais cela prend toujours la majeure partie de votre mémoire.

Veuillez regarder les performances de l'application iOS WWDC 2012 Session 242: Mémoire pour obtenir les informations d'Apple.

3
CarmeloS