F***** awesome!!!! (damn MS curse filter, I need to express my emotions here!). Thanks Tomas! This will improve Rails perf also =)
> -----Original Message----- > From: [email protected] [mailto:ironruby-core- > [email protected]] On Behalf Of Tomas Matousek > Sent: Wednesday, May 06, 2009 5:16 PM > To: [email protected] > Subject: [Ironruby-core] Code Review: Files3 > > tfpt review "/shelveset:Files3;REDMOND\tomat" > > Improves performance for file IO#read method. > Previously we were 10x slower than MRI, now we are approx. 1.5-times > faster. > > Tomas > > MRI: > D:\temp>ruby file.rb > user system total real > write big.txt > 6.287000 0.046000 6.333000 ( 6.337000) > write big_lines.txt > 0.265000 0.063000 0.328000 ( 0.327000) > read big.txt > 100 x 1 x 10000000 3.635000 1.825000 5.460000 ( 5.463000) > 100 x 10 x 1000000 3.370000 2.122000 5.492000 ( 5.493000) > 100 x 1000 x 10000 3.900000 1.747000 5.647000 ( 5.650000) > 100 x 10000 x 1000 5.335000 1.326000 6.661000 ( 6.680000) > 10 x 100000 x 100 1.404000 0.218000 1.622000 ( 1.623000) > 10 x 1000000 x 10 10.858000 0.203000 11.061000 ( 11.065000) > 1 x 10000000 x 1 10.546000 0.000000 10.546000 ( 10.565000) > read big_lines.txt > 100 x 1 x 10000000 3.603000 1.888000 5.491000 ( 5.494000) > 100 x 10 x 1000000 3.479000 2.043000 5.522000 ( 5.525000) > 100 x 1000 x 10000 3.978000 1.716000 5.694000 ( 5.696000) > 100 x 10000 x 1000 5.179000 1.529000 6.708000 ( 6.711000) > 10 x 100000 x 100 1.451000 0.156000 1.607000 ( 1.607000) > 10 x 1000000 x 10 10.842000 0.203000 11.045000 ( 11.050000) > 1 x 10000000 x 1 10.530000 0.031000 10.561000 ( 10.581000) > > IronRuby: > D:\temp>rbr file.rb > user system total real > write big.txt > 4.726830 0.046800 4.773631 ( 4.728769) > write big_lines.txt > 1.060807 0.046800 1.107607 ( 1.045636) > read big.txt > 100 x 1 x 10000000 1.466409 1.216808 2.683217 ( 2.677968) > 100 x 10 x 1000000 2.168414 0.982806 3.151220 ( 3.150579) > 100 x 1000 x 10000 1.653611 0.826805 2.480416 ( 2.481799) > 100 x 10000 x 1000 2.433616 1.669211 4.102826 ( 4.105114) > 10 x 100000 x 100 0.811205 0.156001 0.967206 ( 0.967746) > 10 x 1000000 x 10 6.567642 0.124801 6.692443 ( 6.696175) > 1 x 10000000 x 1 6.255640 0.031200 6.286840 ( 6.290346) > read big_lines.txt > 100 x 1 x 10000000 1.762811 1.216808 2.979619 ( 2.981281) > 100 x 10 x 1000000 2.620817 0.780005 3.400822 ( 3.402718) > 100 x 1000 x 10000 1.840812 1.216808 3.057620 ( 3.059325) > 100 x 10000 x 1000 2.605217 1.950013 4.555229 ( 4.557770) > 10 x 100000 x 100 0.826805 0.171601 0.998406 ( 0.998963) > 10 x 1000000 x 10 6.614442 0.312002 6.926444 ( 6.930307) > 1 x 10000000 x 1 6.333641 0.124801 6.458441 ( 6.493261) > > require 'benchmark' > > File.delete("big.txt") rescue 0 > File.delete("big_lines.txt") rescue 0 > > Benchmark.bm do |x| > puts "write big.txt" > x.report { > File.open("big.txt", "wb") { |f| > 10_000_000.times { f.write('x') } > } > } > > puts "write big_lines.txt" > x.report { > File.open("big_lines.txt", "wb") { |f| > 2.times { > 1_000.times { f.write('x' * 1000 + "\r\n") } > 1_000.times { f.write('x' * 1000 + "\r") } > 1_000.times { f.write('x' * 1000 + "\r\n") } > 1_000.times { f.write('x' * 1000 + "\n") } > 1_000.times { f.write('x' * 1000 + "\r\n") } > } > } > } > > ["big.txt", "big_lines.txt"].each do |file| > puts "read #{file}" > > [ > [100, 1, 10_000_000], > [100, 10, 1_000_000], > [100, 1_000, 10_000], > [100, 10_000, 1_000], > [ 10, 100_000, 100], > [ 10, 1_000_000, 10], > [ 1, 10_000_000, 1], > ].each { |n, m, s| > x.report("#{n} x #{m} x #{s}") { > File.open(file, "r") { |f| > n.times { > f.seek(0); > m.times { > f.read(s) > } > } > } > } > } > > end > end > > _______________________________________________ Ironruby-core mailing list [email protected] http://rubyforge.org/mailman/listinfo/ironruby-core
