2013年01月09日

NSDateFormatterの生成時間

アップルの技術文書や解説ビデオを見ると必ずと言っていいほど、NSDateFormatterは生成コストがすごいからできるかぎり使い回せという趣旨の発言をしている。

本当かどうか調べてみた。単純にNSDateFormatterを生成してフォーマットを設定しNSDateを文字列に変換する。

case 1)は事前にNSDateFormatterを生成しフォーマットもセットしておいた後、stringFromDate:を実行するだけで1000回繰り返す。
case 2)は事前にNSDateFormatterを生成するのは同じだが、毎回フォーマットをセットする。
case 3)は毎回NSDateFormatterを生成する。

破棄時間は対象外にしたいので、ARCはOFFに設定。NSDateFormatterはautoreleaseメッセージを送っておく。

その結果が以下:
case 1)time = 10 235 446(nsec)
case 2)time = 11 717 976(nsec)
case 3)time = 152 146 810(nsec)

「生成」「フォッマット設定」「文字列変換」の一連の流れのうちNSDateFormatter生成時間が9割以上を占めることがわかる。

なるほどNSDateFormatterの生成が時間を要する処理だと言うことがわかった。

私が作っているアプリケーションはNSDateFormatterを頻繁にアプリの色々なところで使っているので考慮する必要がある。だがループ内で何度も生成するとか、実時間処理が気になるゲームアプリなどでなければわざわざ生成したNSDateFormatterをインスタンス変数などで保持するまでのことは必要ない程度のオーバーヘッドだとは思う。

なお、iPhone実機でやったほうがいいのだろうけど、そんなに大きな違いがあるとは思えないのでMacで実行した。

MacBook Pro 2.6GHz Intel Core i7
16GB 1600 MHz DDR3
499.42GB SSD
Mac OS X 10.8.2



posted by 永遠製作所 at 17:15| 東京 ☁| Comment(0) | TrackBack(0) | Cocoa | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。