Vorrei sapere quanto tempo impiega inviare un messaggio a un oggetto con almeno 1 ms di precisione. Come faccio a fare questo?Come faccio a sapere con precisione il tempo necessario per chiamare una funzione su iPhone?
risposta
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.)
È 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
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
Questo è quello che corro. Personalmente non mi interessa se è troppo veloce dato che mi interessano solo i colli di bottiglia. =) – migs647