2012-04-18 45 views
6

Tôi có đoạn mã sau đó là một khoảng thời gian để xử lý:Làm cách nào để đo thời gian giữa hai dòng mã trong Objective-C cho iOS?

self.itemsArray = [Helper changeTheA:self.itemsArray]; 
self.itemsArray = [Helper convertDates:self.itemsArray]; 

Có cách nào, trong Instruments hoặc ở một nơi khác, mà tôi có thể đo thời gian là cần thiết để đi từ dòng đầu tiên của mã để dòng thứ hai của mã .... trong ve hoặc mili giây hoặc một cái gì đó?

Tôi muốn thực hiện một số điều chỉnh nhưng tôi cần có thể đo lường để xem liệu tôi có đang cải thiện mã trước đó hay không.

Cảm ơn.

Trả lời

6

nhanh nhất, bẩn nhất, cách có thể không phải là rất chính xác

NSDate *startDate = [NSDate date]; 

self.itemsArray = [Helper changeTheA:self.itemsArray]; 

NSLog(@"changeTheA time taken: %f", -[startDate timeIntervalSinceNow]); 

Một chút tham gia nhiều hơn nhưng có lẽ giải pháp hữu ích hơn, nếu bạn đang làm một số hồ sơ cơ bản có thể được nhìn thấy here, nó sử dụng một hàm C mà thực hiện một khối bạn cung cấp.


Big mặt lưu ý

Như Justin chỉ ra các hành động thực tế của việc tạo ra một NSDate và sau đó đăng nhập nó ra sẽ giới thiệu giao thoa để đo của bạn và do đó kỹ thuật này là chỉ thực sự bất kỳ tốt cho nhận con số công viên bóng và thậm chí sau đó bạn có lẽ nên chạy một lượng lớn các lần lặp lại mã của bạn trong khối thời gian. Nếu bạn yêu cầu phép đo chính xác thì hãy bỏ qua câu trả lời của Justin

+0

@ Thường thì tôi thường chỉ sử dụng mã này với mã đích được lặp lại nhiều lần (ví dụ: tôi sẽ tiếp tục tăng số lần lặp lại cho đến khi tôi nhận được thứ gì đó có thể đo được sự khác biệt) và tôi chỉ muốn số liệu công viên bóng. –

+0

* CHỈNH SỬA vượt quá giới hạn thời gian - sẽ đọc như bài đăng hàng đầu *: điều này tương đối chậm và không chính xác. đối với nhiều ứng dụng, điều này là quá nhiều can thiệp. – justin

+0

tốt để làm rõ rằng – justin

6

Có. Bạn sẽ sử dụng Sampler của dụng cụ cho việc này.

Chạy ứng dụng, thực hiện các chương trình trong một thời gian, sau đó xác định vị trí các biểu tượng trong Instruments, trong đó có:

self.itemsArray = [Helper changeTheA:self.itemsArray]; 
self.itemsArray = [Helper convertDates:self.itemsArray]; 

Nó sẽ hiển thị dòng cân bằng dòng. Cũng lưu ý rằng Instruments cho phép bạn xác định tần số lấy mẫu, xuống đến 40 micro giây.

2

Tôi sẽ sử dụng đoạn mã sau:

NSTimeInterval start = CACurrentMediaTime(); 

// your code goes here 

NSTimeInterval end = CACurrentMediaTime(); 
NSTimeInterval delta = end - start; 
NSLog(@"Execution took %f seconds.", delta); 

Đó là rất nhiều chính xác hơn NSDate.

+0

Mã không cần phải ở giữa đầu và cuối? – s1m0n

+1

Thất bại sử thi. Đã chỉnh sửa. –

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