Project

General

Profile

Feature #6440

引数にIOを渡した場合のMarshal.loadにバッファを持たせたい

Added by Glass_saga (Masaki Matsushita) about 8 years ago. Updated over 7 years ago.

Status:
Closed
Priority:
Normal
Target version:
[ruby-dev:45637]

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

patch.diff (4.61 KB) patch.diff Glass_saga (Masaki Matsushita), 05/16/2012 12:49 PM
patch2.diff (6.15 KB) patch2.diff Glass_saga (Masaki Matsushita), 06/11/2012 10:25 PM

Also available in: Atom PDF