2010-06-10 16 views
3

J'ai une méthode critique dans une application Objective-C que j'ai besoin d'optimiser autant que possible. Je dois d'abord prendre quelques repères faciles sur cette méthode unique afin que je puisse comparer mes progrès pendant que j'optimise.Benchmarking d'une méthode particulière en Objective-C

Quelle est la méthode la plus simple pour suivre l'heure d'exécution d'une méthode donnée, disons en millisecondes, et l'imprimer pour la console.

Répondre

3

CFAbsoluteTimeGetCurrent() (environ 6 microsecondes) ou mach_absolute_time() de mach/mach_time.h (un peu plus rapide, mais vous devez appeler mach_timebase_info() et faire quelques conversions). Vous pouvez ensuite imprimer sur stdout ou utiliser NSLog; notez que NSLog prend des âges (50 ms?) de sorte que vous voulez le faire après en prenant les mesures. stdout est un peu plus rapide, je pense, mais ne va pas à syslog (c'est-à-dire la console Xcode Organizer/iPhone Configuration Utility).

0
+0

J'ai trouvé un endroit où il me donnera le temps CPU cumulatif, mais le temps d'exécution de cette méthode diffère grandement par appel, donc j'ai besoin d'avoir une panne par appel, je n'ai pas pu trouver ça. Un peu d'aide? –

1

Il y a assez peu de moyens pour instrumenter votre code, mais l'exécuter par Instruments et/ou Shark devrait vous donner suffisamment d'informations pour voir où votre code est lent. Mais rappelez-vous que l'optimisation prématurée est la racine de tous les maux.

2

Une chose que les autres n'ont pas mentionnée ... lorsque vous vérifiez les performances avec Instruments ou Shark, exécutez votre application sur un périphérique plutôt que sur le simulateur. L'appareil est beaucoup plus lent que le simulateur pour beaucoup de choses, mais parfois plus rapide pour certaines choses pour lesquelles il est accéléré mais le simulateur ne l'est pas, donc la vérification de l'appareil est la seule façon d'obtenir une image précise.

Sachez également que NSLogs peut le ralentir lots.

+0

+1 NSLog ne doit être utilisé que pour des mesures relatives entre des segments de code contenant le même nombre d'instructions NSLog. – TechZen

+0

Si je compile une application avec NSLogs, même si je ne débogue pas activement, NSLogs va-t-il encore s'exécuter? –

+0

@Jasconius - oui, ils seront toujours affichés sur le terminal. – DenverCoder9