Actions
Feature #6440
closed引数にIOを渡した場合のMarshal.loadにバッファを持たせたい
Description
=begin
現在の(({Marshal.load}))では、引数に(({IO}))を渡すと(({IO#getbyte}))や(({IO#read}))で当座に必要な部分のみの読み出しを繰り返すので
大量のメソッド呼び出しが発生し、そのコストが無視できません。
そこで、引数に(({IO}))を渡した場合の(({Marshal.load}))にバッファを持たせる事を提案します。
require 'benchmark'
require 'tempfile'
ary = Array.new(1000){ "hoge" }
file = Tempfile.new("foo")
Marshal.dump(ary, file)
Benchmark.bm do |x|
x.report do
100.times do
file.rewind
Marshal.load(file)
end
end
end
file.close
上記のベンチマークでバッファを持つようにしたrubyとtrunkを比較したところ、以下の結果となりました。
trunk(r35660):
user system total real
1.880000 0.000000 1.880000 ( 1.874681)
proposed:
user system total real
0.180000 0.000000 0.180000 ( 0.178556)
patchを添付します。
=end
Files
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0