2009-09-28 8 views
27

Je un profilage de mon application iPhone sur la cible, et selon Instruments 65% du temps est passé en mach_msg_trap.Comment savoir ce que mach_msg_trap attend?

J'ai un thread d'arrière-plan qui s'exécute pour toujours et renvoie les résultats au thread principal en utilisant performSelectorOnMainThread:withObject:waitUntilDone:, environ toutes les 2 secondes. Je n'attends pas avant d'avoir fini.

Répondre

24

Il s'avère que mon application ne passe pas réellement 65% de son temps dans la fonction mach_msg_trap. C'était une erreur de configuration dans Instruments de ma part.

L'outil Sampler utilise par défaut Tous les exemples de compteurs, cela permet de mesurer tous les threads quel que soit leur état.

Passez plutôt à en cours d'exécution des temps d'échantillonnage qui refléteront la charge de travail actuelle. Screenshot of Instruments http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png

+1

Source: http://developer.apple.com/mac/library/qa/qa2009/qa1619.html – Nickolay

+2

tous les liens sont brisés ici – grane2212

2

Si vous ne vous attendez pas à ce que votre thread principal fasse autre chose qu'attendre ce thread d'arrière-plan (ou attendre la saisie de l'utilisateur), rien ne vous inquiète - votre application n'a simplement rien à faire la plupart du temps .

Si vous attendez que le thread principal fasse activement quelque chose d'autre, veuillez mettre à jour votre question pour le décrire. Dans ce cas, vous pouvez regarder les piles d'appels complets vers mach_msg_trap car elles se trouvent souvent au bas d'une pile d'appels où le gaspillage de temps réel est plus haut.

+0

Je ne m'attends pas à ce que mon thread principal fasse beaucoup, sauf recevoir la mise à jour et redessiner l'écran une fois toutes les 2 secondes. Je m'attends cependant à ce que mon fil de fond prenne tous les cycles d'horloge restants. – PeyloW

+0

Je pense toujours qu'il vaut la peine de vérifier la callstack au-dessus de mach_msg_trap juste pour vérifier votre supposition que le thread principal devrait juste être au ralenti. – nall

Questions connexes