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。
Iterations | IMP-cached message send | Objective-C message send |
1000000000 | 1.0 | 6.5 |
10000000 | 1.0 | 6.5 |
100000 | 1.2 | 6.5 |
1000 | 1.4 | 6.7 |
10 | 21.7 | 26.6 |