Actions
Feature #6129
closedString#each_lineにおけるmemmem()の利用
Description
memmem()というGNU拡張のライブラリ関数がありますが、string.cのrb_str_each_line()で可能であればこのmemmem()を利用する事を提案します。
次のベンチマークを実行しました。
require 'benchmark'
str = "hogehifuga" * 100_0000
Benchmark.bm do |x|
x.report do
str.each_line("hi") {}
end
end
結果:
trunk(r34969):
user system total real
0.790000 0.000000 0.790000 ( 0.795141)
user system total real
0.790000 0.000000 0.790000 ( 0.795141)
user system total real
0.790000 0.000000 0.790000 ( 0.795141)
proposal:
user system total real
0.510000 0.000000 0.510000 ( 0.507389)
user system total real
0.530000 0.000000 0.530000 ( 0.541944)
user system total real
0.520000 0.000000 0.520000 ( 0.522825)
以上のように、memmem()を利用する事でパフォーマンスの改善が見られます。
但し、改行文字がrb_default_rsと同一である場合には既にmemchr()を用いた高速な検索が行われるようになっている為、
パフォーマンスが改善されるのはrb_default_rs以外の改行文字を指定した場合のみです。
patchを添付します。
Files
Actions
Like0
Like0Like0Like0Like0Like0