From: Yusuke ENDOH Date: 2009-11-15T21:50:20+09:00 Subject: [ruby-dev:39698] Re: [Feature #2372] read_all() with buffering 遠藤です。 2009年11月15日21:21 _ wanabe : > io.c の read_all() で、変換が必要な場合の処理が少し重いようだったので > バッファに少し溜めてから io_shift_cbuf() を呼び出すようにするパッチを書きました。 > 溜めるバイト数は io_shift_cbuf() 中にあった式を参考にしています。 パッチの内容は理解していませんが > 最大で約 2.8 倍速を計測しましたが、変換が複雑な場合には差は縮まり、 > また当然ながら短いファイルではほとんど差は出ませんでした。 > > どなたかもし興味を持っていただけたら、Windows でない、または十分速い環境で > 同様に速度が改善するかどうか試していただけると助かります。 Debian で試してみました。最大 2.8 倍くらいでした。 $ ./ruby test.rb user system total real short r 0.310000 0.190000 0.500000 ( 0.489743) short r:us-ascii:utf-8 0.760000 0.220000 0.980000 ( 0.984798) short r:us-ascii:utf-16le 1.030000 0.270000 1.300000 ( 1.293715) short rb 0.260000 0.220000 0.480000 ( 0.480045) short rb:us-ascii:utf-8 0.730000 0.260000 0.990000 ( 1.005522) short rb:us-ascii:utf-16le 1.050000 0.250000 1.300000 ( 1.311958) long r 0.040000 0.020000 0.060000 ( 0.057341) long r:us-ascii:utf-8 3.800000 0.020000 3.820000 ( 3.817237) long r:us-ascii:utf-16le 7.840000 0.040000 7.880000 ( 7.956883) long rb 0.020000 0.030000 0.050000 ( 0.052485) long rb:us-ascii:utf-8 3.830000 0.030000 3.860000 ( 3.867369) long rb:us-ascii:utf-16le 7.960000 0.020000 7.980000 ( 8.031679) $ ./ruby.org test.rb user system total real short r 0.280000 0.190000 0.470000 ( 0.459421) short r:us-ascii:utf-8 0.830000 0.190000 1.020000 ( 1.023667) short r:us-ascii:utf-16le 1.160000 0.180000 1.340000 ( 1.349957) short rb 0.250000 0.210000 0.460000 ( 0.454870) short rb:us-ascii:utf-8 0.850000 0.170000 1.020000 ( 1.019038) short rb:us-ascii:utf-16le 1.100000 0.240000 1.340000 ( 1.339989) long r 0.020000 0.040000 0.060000 ( 0.053929) long r:us-ascii:utf-8 11.730000 0.020000 11.750000 ( 11.753191) long r:us-ascii:utf-16le 15.880000 0.040000 15.920000 ( 15.969792) long rb 0.020000 0.020000 0.040000 ( 0.046306) long rb:us-ascii:utf-8 11.020000 0.030000 11.050000 ( 11.038415) long rb:us-ascii:utf-16le 15.400000 0.020000 15.420000 ( 15.425342) $ ./ruby -v ruby 1.9.2dev (2009-11-14 trunk 25768) [i686-linux] -- Yusuke ENDOH