2014年5月22日木曜日

ベンチマーキングに便利なGCD関数 dispatch_benchmark

ドキュメントに載っていないが計測で便利な関数があるとのこと。
extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));

実行回数countを指定して、計測対象の処理をブロック内に書けば、その処理にかかった平均時間[ns]が取得できるというもの。

利用例(NSHipsterより)
uint64_t t = dispatch_benchmark(iterations, ^{
    @autoreleasepool {
        NSMutableArray *mutableArray = [NSMutableArray array];
        for (size_t i = 0; i < count; i++) {
            [mutableArray addObject:object];
        }
    }
});
NSLog(@"[[NSMutableArray array] addObject:] Avg. Runtime: %llu ns", t);
man(3)によれば
The dispatch_benchmark function executes the given block multiple times according to the count variable and then returns the average number of nanoseconds per execution. This function is for debugging and performance analysis work. For the best results, pass a high count value to dispatch_benchmark.
ドキュメント未掲載の関数らしいのでAppStore申請時には含めないのが吉。 なお記事ではNSMutableArrayの初期キャパシティの有無によるパフォーマンス比較なども紹介されている(そっちが本題)。

0 件のコメント:

コメントを投稿