From: _ wanabe Date: 2010-03-07T18:47:45+09:00 Subject: [ruby-core:28545] [Feature #905] Add String.new(fixnum) to preallocate large buffer Issue #905 has been updated by _ wanabe. Hi, > opt = false > 1000.times do > s = "" > s.buffer(opt ? 100_001 : 100) > x = "x" * 1000 > 100.times { s << x } > end > > takes 0.115 sec. when opt is false, 0.130 sec. when opt is true. I tried too. Interestingly, it gets faster on my environment. $ cat test.rb require 'benchmark' opt = ARGV[0] list = Array.new(10) do Benchmark.realtime do 1000.times do s = "" s.buffer(opt ? 100_001 : 100) x = "x" * 1000 100.times { s << x } end end end list.sort! p list.first, list.last $ ./ruby -v -Ilib test.rb opt ruby 1.9.2dev (2010-03-07 trunk 26843) [i386-mingw32] 0.1780099868774414 0.18601107597351074 $ ./ruby -v -Ilib test.rb ruby 1.9.2dev (2010-03-07 trunk 26843) [i386-mingw32] 0.21401190757751465 0.22301316261291504 But, I guess, the patch may not work as expected in some cases. Some methods (String#succ!, sub!, []=, and so on) can let CAPA shrink. ---------------------------------------- http://redmine.ruby-lang.org/issues/show/905 ---------------------------------------- http://redmine.ruby-lang.org