From: John Joyce Date: 2007-09-29T02:21:31+09:00 Subject: Re: Ruby performance On Sep 28, 2007, at 11:06 AM, khaines@enigo.com wrote: > On Sat, 29 Sep 2007, Vasyl Smirnov wrote: > >> Hi, >> >> I'm new to Ruby, and I've just tried to measure it's performance >> compared to Python, and got some interesting results. >> >> The Ruby test script is: >> >> #!/usr/bin/env ruby >> >> s = "" >> i = 0 >> while line = gets >> s += line >> i += 1 >> puts(i) if i % 1000 == 0 >> end >> >> and the Python one: >> >> #!/usr/bin/env python >> >> import sys >> >> s = "" >> i = 0 >> for line in sys.stdin: >> s += line >> i += 1 >> if i % 1000 == 0: print i >> >> >> I fed a 1MB-large file as input to each of this script. The strange >> thing is that the Ruby version starts to output progress slower and >> slower as the s string grows. The Python version went smoothly. > > This is because "string" + "otherstring" allocates a new string, > "stringotherstring". > > Use << instead, and it will concatenate "otherstring" to the > orignal "string". > > s = "" > i = 0 > while line = gets > s << line > i += 1 > puts(i) if i % 1000 == 0 > end > > Performance should be a lot better with that version. > > > Kirk Haines > > That should be on a Ruby Optimization list somewhere!