함수 실행시간 측정하기

2015-06-17

기본 방법

코딩을 하다보면 특정함수의 실행시간을 측정하고 싶을 때가 있습니다. 예를들어, 함수를 개선해서 개선 전과 후의 처리시간을 비교하고 싶을 때가 바로 그때 이지요. 간단히 코드로 작성해보면 다음과 같습니다.

NSDate *methodStart = [NSDate date];

/* ... 함수 처리 ... */

NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];
NSLog(@"실행시간 = %f", executionTime);

함수 처리를 하기 직전 현재시간과 함수를 처리하고 난 직후의 현재시간을 구하고, 함수 처리가 끝난 직후의 시간에서 함수 처리를 하기 직전의 시간을 빼면 그 차이가 바로 함수를 실행하는데 걸린 시간입니다.

응용 방법

만약 실행시간 측정을 여러군데서 하거나 자주 사용해야하는 경우라면 다음과 같이 예약어로 정의를 해서 사용하면 편리합니다.

#define TICK   NSDate *startTime = [NSDate date]
#define TOCK   NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])

-[startTime timIntervalSinceNow] 앞에 ‘-‘(마이너스) 기호가 가 붙은 이유는 timeIntervalSinceNow 메소드를 호출한 객체가 현재시간 이전 시점의 객체라면 ‘-‘값을 반환하기 때문에 그것을 양수 값으로 만들기 위해 ‘-‘를 붙인 것입니다. 등록된 예약어는 아래와 같이 사용하시면 됩니다.

TICK;
/* ... 메소드 실행 ... */
TOCK;

[참 고]

  1. How to log a method’s execution time exactly in milliseconds? - StackOverflow Answer1
  2. How to log a method’s execution time exactly in milliseconds? - StackOverflow Answer2