2009-03-14 5 views

Odpowiedz

12

Oto, co zrobić:

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

wyjście będzie w sekundach (z części po przecinku). NSDate s mają rozdzielczość w skali milisekund, chociaż nie jestem pewien dokładnie, jak dokładne są.

Jeśli kod, który próbujesz zrobić, jest zbyt szybki, umieść go w pętli, która uruchamia kod sto razy. (To oczywiście zakłada, że ​​kod, którego używasz, nie ma skutków ubocznych.)

+0

To jest to, co uruchamiam. Osobiście nie dbam o to, czy jest to zbyt szybkie, ponieważ zależy mi tylko na wąskich gardłach. =) – migs647

15

Możesz użyć mach_absolute_time, aby zmierzyć w nanosekundach.

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

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

0

Zastosowanie dispatch_benchmark zalogować metodę czas wykonywania w nanosekund.
Ma znacznie ładniejszą składnię niż ręcznie zapętlanie i wywoływanie mach_absolute_time() dispatch_benchmark jest częścią Grand Central Dispatch. Ta funkcja nie jest dostępna publicznie ogłoszony, więc musisz to zrobić sam przed użyciem:

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

Używam tego do czasu wykonania log:

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

zasługa Benchmarking

Powiązane problemy