타이밍 목표 C 코드
-
06-07-2019 - |
문제
목표 C 응용 프로그램에 자동화 된 성능 테스트를 추가하고 싶습니다. (이것은 단순히 일련의 테스트를 실행하여 엔진의 주요 부분의 현재 성능을보고 싶습니다.) 이렇게하려면 타이밍 지원 루틴을 작성하고 싶습니다.
- (void) benchmarkSelector: (SEL) msg onObject: (id) target
{
// run the selector thousands of times, print detailed stats
}
문제는 밀리 초에 관심이 있고 performSelector
벤치마킹 코드에서 결과는 결과를 꽤 비뚤어집니다. 이걸 어떻게 갈 건가요? 내려 가야할까요? objc_msgSend
?
해결책
사용 methodForSelector:
, 함수 포인터를 실제 구현에 반환합니다.
IMP methodImp = [target methodForSelector:msg];
for (int i=0; i<1000; ++i) {
NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];
methodImp(target, msg);
NSTimeInterval duration = [NSDate timeIntervalSinceReferenceDate] - start;
// Do something with duration
}
이 전략은 메소드의 실제 런타임을 측정하는 데 유용하지만 표준 Objective-C 메시지 통과 구문으로 호출하려는 경우 메시지 전달 오버 헤드를 포함시키는 것과 마찬가지로 관련이있을 수 있습니다. 당신의 측정.
또한 메소드가 실제로 다른 매개 변수를 가져 오면 결과를 시전해야합니다. methodForSelector:
적절한 매개 변수가있는 함수 포인터에 플로트를 두 배로 전환하는 것을 피하기 위해 nsObject 클래스 참조 자세한 정보 및 예를 보려면.
제휴하지 않습니다 StackOverflow