From: "Glass_saga (Masaki Matsushita)" Date: 2012-04-30T11:36:16+09:00 Subject: [ruby-dev:45595] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化 Issue #6311 has been updated by Glass_saga (Masaki Matsushita). File patch3.diff added >rb_memsearch_ss()が何だったか思い出せないですが、これ自体を置き換えてはどうでしょうかね。 添付のpatchのようにするのが良いでしょうか。 rb_memsearch_ss()についてですが、これは1つのVALUEの値にSIZEOF_VALUE以下の長さのバイト列の組み合わせを対応させた完全ハッシュ法のようです。 ---------------------------------------- Feature #6311: memmem()によるrb_memsearch()の高速化 https://bugs.ruby-lang.org/issues/6311#change-26324 Author: Glass_saga (Masaki Matsushita) Status: Assigned Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: core Target version: [Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。 次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。 require 'benchmark' str = "hoge" * 10000 + "fugafuga" Benchmark.bm do |x| x.report do 1000.times { str.index("fugafuga") } end end trunk(r35363): user system total real 0.070000 0.000000 0.070000 ( 0.072126) user system total real 0.070000 0.010000 0.080000 ( 0.081420) user system total real 0.080000 0.000000 0.080000 ( 0.091658) proposal: user system total real 0.000000 0.000000 0.000000 ( 0.004237) user system total real 0.000000 0.000000 0.000000 ( 0.003737) user system total real 0.010000 0.000000 0.010000 ( 0.004696) patchを添付します。 -- http://bugs.ruby-lang.org/