JRuby + Geotools は CRuby + OGR に比べて処理時間が2倍程度になる場合がある

JRuby + GeoTools on Mac OS X がすごく気持ちよく使える

http://d.hatena.ne.jp/hfu/20070830/1188517976

ということで気持ちよく使い始めた JRuby + Geotools ですが,処理の速度の目安を得るべく,ある Shapefile の全データを読み出すという処理にかかる時間を CRuby + OGR と比較してみたところ,

JRuby + Geotools
7.748s
CRuby + OGR
3.92265s

となりました。Shapefile を読む直前と読んだ直後で Time.now してその差をとるという方法をとっていますので,JVM 起動にかかる時間は除いてこのくらいの違いがあることになります。使い勝手と処理速度のバランスを考慮しながら使い分けようと思いました。
原因はまだ追っていませんが,現時点では,JRuby が原因というよりも Geotools とその下の JTS が原因ではないかと思っています。以前 JTS のソースを 30 分程度だけ追ったことがあるのですが,一つの関数的処理をする中にやたらと new が出てきて,これは遅くなっても仕方ないと感じたことがありました。
Geotools の機能を Ruby っぽく使うためラッパも作成中ですが,ラッパの中でやたらに型変換をすることになりそうです。これだけの非本質的な速度低下のコストに見合う機能が Geotools/JTS にあるかどうか,OGR も頑張ればだましだまし使えるのではないか,という点を見て作業を進めていきたいと思っています。