すがブロ

sugamasaoのhatenablogだよ

これってどっちが早いんだろう(2)

指摘して頂いたので

前回のコメントで教えてもらった正規表現を使う時の定石パターンも追加してもう一度測定しなおしてみたよ。

恥ずかしい話

only としたいところが onry になってた!><恥ずかしくて死にたい\(^o^)/

あと

そこらへんは脳内補完してね!と思ってテキトーに書いた部分を突っ込まれてしまったおれ涙目。テキトーに書いててごめんなしあ!

検証用ソース

二つは以前と同じ。

FILE_NAME='Book1.csv'

list=[]

File.open(FILE_NAME, 'r') do |file|
  file.each do |line|
    list << line if line =~ /even if/o   # ←ここに o が付いた
  end
end

o オプションとつけることで正規表現オブジェクトを繰り返し生成しないようにするみたい。
今回みたいに動的に変わるような場所じゃなければこれで最適化されるっぽい(参考)。

検証結果

それぞれのプログラムを10回繰り返して、その平均値でだしてみたよ。
ruby_only2 が上記で記載したプログラム

system
real:0m0.0688s user:0m0.0438s sys0m0.0237s

ruby_only
real:0m0.4578s user:0m0.3437s sys0m0.1136s

ruby_only2
real:0m0.448s user:0m0.3362s sys0m0.1116s

データが大したことないからかそんなに差は出なかったけど、それでも若干早くなってる。すげえ!

環境について

以下の環境で試してみたよ。

[masa@www]~/sokutei% cat /etc/redhat-release
Fedora release 7 (Moonshine)
[masa@www]~/sokutei% echo $LANG
ja_JP.UTF-8
[masa@www]~/sokutei% grep --v
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
これはフリー・ソフトウェアです。複製に関する条件はソースをご覧ください。
これは無保証です。営利目的やある特定の目的にむけた適正のものでもありません。
[masa@www]~/sokutei% ruby -v
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-linux]

環境によって結果が逆転するってホンマかいな(´Д`)