2009-03-14 5 views

Répondre

12

Voici ce que je fais:

NSDate * start = [NSDate date]; 
// do whatever I need to time 
NSLog(@"time took: %f", -[start timeIntervalSinceNow]); 

La sortie sera en secondes (avec une partie décimale). NSDate s ont une résolution sur l'échelle des millisecondes, bien que je ne sache pas exactement comment ils sont précis.

Si le code que vous essayez de chronométrer est trop rapide, placez-le dans une boucle qui exécute le code une centaine de fois. (Cela suppose, bien sûr, que le code que vous chronométrez n'a aucun effet secondaire.)

+0

C'est ce que je cours. Personnellement, je m'en fous si c'est trop rapide car je ne m'inquiète que des goulots d'étranglement. =) – migs647

15

Vous pouvez utiliser mach_absolute_time pour mesurer en nanosecondes.

#import <mach/mach_time.h> 

uint64_t startTime = 0; 
uint64_t endTime = 0; 
uint64_t elapsedTime = 0; 
uint64_t elapsedTimeNano = 0; 

mach_timebase_info_data_t timeBaseInfo; 
mach_timebase_info(&timeBaseInfo); 

startTime = mach_absolute_time(); 

//do something here 

endTime = mach_absolute_time(); 

elapsedTime = endTime - startTime; 
elapsedTimeNano = elapsedTime * timeBaseInfo.numer/timeBaseInfo.denom; 

Référence: Technical Q&A QA1398: Mach Absolute Time Units

0

Utilisez dispatch_benchmark pour enregistrer votre temps d'exécution de la méthode en nanosecondes.
Il a une syntaxe beaucoup plus agréable que manuellement en boucle et en appelant mach_absolute_time() dispatch_benchmark fait partie de Grand Central Dispatch. Cette fonction n'est pas déclaré publiquement, de sorte que vous aurez à faire vous-même avant de l'utiliser:

extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));

J'utilise cela pour le temps d'exécution du journal:

size_t const blockIterations = 1; //block call count 
uint64_t t = dispatch_benchmark(blockIterations, ^{ //your code inside block 
     [self TEST_processJSONDataRecordsWithCompletionHandler:^(id handler) {}]; 
    }); 
NSLog(@" Avg. Runtime in nanoseconds : %llu ns", t); 

Le crédit va à Benchmarking

Questions connexes