きりかノート 3冊め

おあそびプログラミング

Objective-C メソッド呼び出しほか、各種パフォーマンスの比較

Performance Comparisons of Common Operations, Leopard Edition という、Leopard 上での各種操作のパフォーマンスを調べた一覧がでてた。

Objective-C のメソッド呼び出しでは、IMP-cached message send > Objective-C message send > NSInvocation message send で高速という、順当な結果。RubyCocoa でもまだ一部使っている NSInvocation は、思っていたほどには遅くはないなあ。

調査に利用したコード を見てみると、Objective-C message send は 2回目以降の呼び出しがキャッシュされる(メソッドキャッシュをクリアしていない)はずだし、IMP-cached は IMP の関数ポインタを実行しているだけなので、ちょっと名前がまぎらわしい。

実行回数を減らして測定してみるとこんな感じ。結果の値は Time per (ns)。環境は MacBook2,1 MacOSX 10.5.1。

IterationsIMP-cached message sendObjective-C message send
10000000001.06.5
100000001.06.5
1000001.26.5
10001.46.7
1021.726.6