From: Tim Pease Date: 2008-06-25T01:57:21+09:00 Subject: Re: Performance improvement possible? On Jun 24, 2008, at 10:23 AM, Philip Rhoades wrote: > People, > > I have asked before about Ruby to C conversion programs and other > alternatives with no really satisfactory solution for my particular > situation. I decided to test out a conversion of one of the C > programs and see what sort of results I get. This particular small > C program is called 32,000 times from loops within a shell script. > The program then processes a text file, writes a text file and > exits. The same shell script with a Ruby program replacing the C > program does exactly the same thing but takes 8.5 times as long (27m/ > 227m). > > The profile on ONE execution of the Ruby program produced: > > % cumulative self self total > time seconds seconds calls ms/call ms/call name > 65.18 14.15 14.15 1 14150.00 21700.00 Array#each > 12.44 16.85 2.70 93792 0.03 0.03 Array#[] > 8.15 18.62 1.77 62108 0.03 0.03 String#split > 6.73 20.08 1.46 53215 0.03 0.03 String#== > 2.58 20.64 0.56 66 8.48 12.73 Range#each > > It would be SO much nicer to rewrite some stuff that needs rewriting > and write ALL new stuff in Ruby but this looks impossible with these > times . . > > Any suggestions for performance improvements? > The general approach I've followed is to write the code in Ruby, see where the performance bottlenecks are, and then refactor those parts of the code into a C-extension for Ruby. Most recently, refactoring a regexp based string tokenizer into a Ragel based C-extension gave about 13x performance improvement. Add salt to taste. Blessings, TwP