2009-03-14 16 views

Respuesta

12

Aquí es lo que hago:

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

La salida será en cuestión de segundos (con una parte decimal). NSDate s tienen una resolución en la escala de milisegundos, aunque no estoy seguro de qué tan precisos son.

Si el código que está intentando medir es demasiado rápido, colóquelo en un bucle que ejecute el código cientos de veces. (Eso supone, por supuesto, que el código que está cronometrando no tiene efectos secundarios.)

+0

Esto es lo que corro. Personalmente no me importa si es demasiado rápido ya que solo me preocupan los cuellos de botella. =) – migs647

15

Puede usar mach_absolute_time para medir en nanosegundos.

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

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

0

Uso dispatch_benchmark para registrar el tiempo de ejecución método en nanosegundos.
Tiene una sintaxis mucho más agradable que bucles y llamadas manuales mach_absolute_time() dispatch_benchmark es parte de Grand Central Dispatch. Esta función no está declarado públicamente, por lo que tendrá que hacer eso mismo antes de su uso:

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

estoy usando esto para el tiempo de ejecución de 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); 

crédito va a Benchmarking

Cuestiones relacionadas