Feature #2372: read_all() with buffering
http://redmine.ruby-lang.org/issues/show/2372

起票者: _ wanabe
ステータス: Open, 優先度: Low
カテゴリ: core, Target version: 1.9.x

io.c の read_all() で、変換が必要な場合の処理が少し重いようだったので
バッファに少し溜めてから io_shift_cbuf() を呼び出すようにするパッチを書きました。
溜めるバイト数は io_shift_cbuf() 中にあった式を参考にしています。

ベンチマークスクリプトとその結果を併せて添付します。
bm_io_file_read.rb を参考に、エンコーディングやモードを複数試すようにしています。
Windwos 以外では 'r' モードは 'rb' モードと同じ結果になると思います。

最大で約 2.8 倍速を計測しましたが、変換が複雑な場合には差は縮まり、
また当然ながら短いファイルではほとんど差は出ませんでした。

どなたかもし興味を持っていただけたら、Windows でない、または十分速い環境で
同様に速度が改善するかどうか試していただけると助かります。


----------------------------------------
http://redmine.ruby-lang.org