From: "NARUSE, Yui" Date: 2009-11-16T00:19:25+09:00 Subject: [ruby-dev:39699] Re: [Feature #2372] read_all() with buffering 成瀬です。 _ wanabe wrote: > io.c の read_all() で、変換が必要な場合の処理が少し重いようだったので > バッファに少し溜めてから io_shift_cbuf() を呼び出すようにするパッチを書きました。 > 溜めるバイト数は io_shift_cbuf() 中にあった式を参考にしています。 あー、なるほど、IO の待ちよりも、transcode の呼び出し (more_char の処理 ?) の方が遅いって話ですね。 思うに妥当な指摘で、うちでも速くなりました。 % ruby19.orig test.rb user system total real short r 0.335938 1.000000 1.335938 ( 1.328293) short r:us-ascii:utf-8 1.210938 0.867188 2.078125 ( 2.082787) short r:us-ascii:utf-16le 1.648438 1.007812 2.656250 ( 2.658761) short rb 0.335938 0.812500 1.148438 ( 1.152713) short rb:us-ascii:utf-8 1.289062 0.984375 2.273438 ( 2.304020) short rb:us-ascii:utf-16le 1.531250 0.906250 2.437500 ( 2.445138) long r 0.023438 0.101562 0.125000 ( 0.121755) long r:us-ascii:utf-8 14.703125 0.101562 14.804688 ( 14.856436) long r:us-ascii:utf-16le 24.406250 0.062500 24.468750 ( 24.553504) long rb 0.031250 0.078125 0.109375 ( 0.106960) long rb:us-ascii:utf-8 13.179688 0.039062 13.218750 ( 13.273193) long rb:us-ascii:utf-16le 23.031250 0.062500 23.093750 ( 23.153640) % ruby19 test.rb user system total real short r 0.328125 0.703125 1.031250 ( 1.031874) short r:us-ascii:utf-8 1.226562 0.867188 2.093750 ( 2.121321) short r:us-ascii:utf-16le 1.601562 0.742188 2.343750 ( 2.341433) short rb 0.335938 0.695312 1.031250 ( 1.025165) short rb:us-ascii:utf-8 1.171875 0.781250 1.953125 ( 1.958811) short rb:us-ascii:utf-16le 1.578125 0.875000 2.453125 ( 2.512860) long r 0.023438 0.093750 0.117188 ( 0.122622) long r:us-ascii:utf-8 6.625000 0.046875 6.671875 ( 6.786332) long r:us-ascii:utf-16le 13.507812 0.054688 13.562500 ( 13.699172) long rb 0.015625 0.093750 0.109375 ( 0.108933) long rb:us-ascii:utf-8 6.632812 0.046875 6.679688 ( 6.703453) long rb:us-ascii:utf-16le 13.515625 0.046875 13.562500 ( 13.641543) % ruby19 -v ruby 1.9.2dev (2009-11-14 trunk 25768) [x86_64-freebsd8.0] -- NARUSE, Yui