2009-03-14 12 views

risposta

12

Ecco quello che faccio:

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

L'uscita sarà in secondi (con una parte decimale). Gli NSDate hanno una risoluzione sulla scala dei millisecondi, anche se non sono sicuro di quanto accurati siano.

Se il codice che stai provando per il tempo è troppo veloce, inseriscilo in un ciclo che esegue il codice un centinaio di volte. (Ciò presuppone, ovviamente, che il codice che stai cronometrando non abbia effetti collaterali.)

+0

Questo è quello che corro. Personalmente non mi interessa se è troppo veloce dato che mi interessano solo i colli di bottiglia. =) – migs647

15

È possibile utilizzare mach_absolute_time per misurare in nanosecondi.

#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; 

Riferimento: Technical Q&A QA1398: Mach Absolute Time Units

0

Usa dispatch_benchmark per accedere metodo di tempo di esecuzione in nanosecondi.
Ha una sintassi molto più gradevole rispetto al ciclo e alla chiamata manuale mach_absolute_time() dispatch_benchmark fa parte di Grand Central Dispatch. Questa funzione non è pubblicamente dichiarato, quindi dovrete farlo da soli prima dell'uso:

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

Sto usando questo per il tempo di esecuzione di registro:

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); 

merito va a Benchmarking

Problemi correlati