2009-03-14 37 views

Trả lời

12

Dưới đây là những gì tôi làm:

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

Đầu ra sẽ là chỉ trong vài giây (với một phần thập phân). NSDate s có độ phân giải trên thang đo mili giây, mặc dù tôi không chắc chắn chính xác độ chính xác của chúng.

Nếu mã bạn đang cố gắng quá nhanh, hãy đặt mã vào vòng lặp chạy mã hàng trăm lần. (Điều đó giả định, tất nhiên, mã bạn đang định thời không có tác dụng phụ.)

+0

Đây là những gì tôi chạy. Cá nhân tôi không quan tâm nếu nó quá nhanh vì tôi chỉ quan tâm đến tắc nghẽn. =) – migs647

15

Bạn có thể sử dụng mach_absolute_time để đo bằng nano giây.

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

tham khảo: Technical Q&A QA1398: Mach Absolute Time Units

0

Sử dụng dispatch_benchmark để đăng nhập thời gian thực hiện phương pháp trong nano giây.
Có cú pháp đẹp hơn nhiều so với vòng lặp thủ công và gọi mach_absolute_time() dispatch_benchmark là một phần của Grand Central Dispatch. Chức năng này không được công khai tuyên bố, do đó bạn sẽ phải làm điều đó cho mình trước khi sử dụng:

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

Tôi đang sử dụng này cho thời gian thực hiện đăng nhập:

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

tín dụng đi vào Benchmarking

Các vấn đề liên quan