ベンチマーク用の簡単なモジュールをつくった

    [RRBenchmark benchmark:^(RRBRunner* runner){

      [runner report:@"NSUUID:UUIDString" context:^{
        // Code block 1
        NSString* uid = [[NSUUID UUID] UUIDString];
      }];

      [runner report:@"CFUUIDCreate" context:^{
        // Code block 2
        CFUUIDRef uuid = CFUUIDCreate(nil);
        NSString* uid =  (__bridge NSString*)CFUUIDCreateString(nil, uuid);
        CFRelease(uuid);
      }];

      [runner report:@"ooid" context:^{
        // Code block 3
        // http://sourceforge.net/projects/ooid/
        NSString* uid = [UUID generateV4];
      }];

    } iterations:10000];

https://github.com/laiso/RRBenchmark/raw/master/Documents/images/console-result.png

こういうの。

iOSアプリケーションを開発していてパフォーマンスを改善するフェーズにきて、Instruments やプロファイラやなんかでボトルネックを探してて、ああここが遅いなというところを発見して、じゃあこういう風に変えようという案があるんだけどその時点での計測がしたいという時にコードの中にしのびこませる使い方がしたい。

みんなどうやっているのかよく知らないけど(計測用のスニペットとかあるのかな)、そういう場面が度々あったのでRuby標準ライブラリのBenchmarkモジュールみたいなものが欲しいと思ってつくった。

俺のたいがい解説くんタイプなので開発最新情報とかには詳しいけど実装はアヤしいのでライブラリとして妥当な感じかどうかはわからないけど、レビューedがわりにもなるしいいだとうとそのまま開陳している次第です。