EOKVCPerformance
2007/03/30 (Fri) 22:07:46 JST
?KeyValueCodingのパフォーマンス
KVCは便利ではありますが、パフォーマンス上の理由から必要なときにだけ使うべきとされています(リンク先の文書はCocoaのKVCに関するものですが、WOでも同じことでしょう)。http://homepage.mac.com/mkino2/panther/KeyValueCoding/Performance.html
というわけで、検索順序とアクセス方法でそれぞれ100万回の呼び出しをした結果を比較してみます。 http://www.spice-of-life.net/webobjects/eof/kvc/KVCTest.java
検索順序での比較
キーのアクセサメソッド・インスタンス変数の検索順序ごとの比較です。 かっこがつかないのはインスタンス変数への直接アクセスです。
| 検索順序 | 時間(10ミリ秒) |
| getA() | 1172 |
| B() | 1109 |
| isC() | 1131 |
| _getD() | 1150 |
| _E() | 1112 |
| _F() | 1112 |
| _G | 1346 |
| _isH | 1336 |
| I | 1348 |
| isJ | 1340 |
メソッド名や変数名で大きく速度が変わることはないようですが、アクセサメソッドを使うほうがインスタンス変数に直接アクセスするより高速です。
アクセス方法での比較
次に、KVCを使う場合と使わない場合で比較します。
| アクセス方法 | 時間(10ミリ秒) |
| インスタンス変数 | 14 |
| アクセサメソッド | 16 |
| KVC (getA()) | 1147 |
検索を行うので遅くなるのは当然ですが、インスタンス変数やアクセサメソッドを使うよりもはるかに遅いようです。
Inverse Pages: WebObjects基礎研究室