2009-03-14 3 views

答えて

12

は、ここで私は何をすべきかです:

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

出力は(小数部分で)秒になります。 NSDateは、どれだけ正確であるか正確にはわかりませんが、ミリ秒のスケールで解決しています。

時間のかかるコードが速すぎる場合は、コードを100回実行するループに入れます。 (もちろん、タイミングをとっているコードに副作用がないと仮定します)。

+0

これは私が走っているものです。私は個人的にはボトルネックを心配しているので、それが速すぎるかどうか気にしません。 =) – migs647

15

mach_absolute_timeを使用すると、ナノ秒単位で測定できます。

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

参考: Technical Q&A QA1398: Mach Absolute Time Units

0

使用dispatch_benchmarkは、ナノ秒単位でのメソッドの実行時間をログに記録します。
これは、手作業での呼び出しと呼び出しよりも構文がはるかに優れています。mach_absolute_time() dispatch_benchmarkはGrand Central Dispatchの一部です。

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

クレジットがBenchmarking

に行く:ログの実行時間のために

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

私はこれを使用しています:あなたが自分で使用する前にそれを行う必要がありますので、この機能は公に、宣言されていません。

関連する問題