From: "David S." Date: 2001-05-06T02:47:11+09:00 Subject: [ruby-talk:14714] Re: Why's Ruby so slow in this case? On Sun, May 06, 2001 at 01:11:24AM +0900, Stefan Matthias Aust wrote: > > I profiled the code and here's the result. > > % cumulative self self total > time seconds seconds calls ms/call ms/call name > 24.65 255.12 255.12 101328 2.52 7.51 Object#displace > 10.64 365.24 110.12 101328 1.09 1.63 Object#onmap > 10.58 474.77 109.53 18949 5.78 156.36 Range#each ^^^^^^^^^^^^^^^^^^ It seems to me that your code is spending most of its time in the range loops. I'd try replacing the loops like for i in 0...count with simpler "while" loops like i = 0 while (i < count) ... i = i + 1 end I'm guessing Range allocates a new array of indices for each loop. Kind of wasteful, especially if it's being many times over again, don't you think? David S. > 7.01 547.27 72.50 101328 0.72 0.97 Object#even > 5.73 606.56 59.29 92238 0.64 0.90 Object#xytoh > 4.53 653.49 46.93 110044 0.43 0.55 Object#htoy > 4.49 699.92 46.44 110044 0.42 0.55 Object#htox > 4.36 745.02 45.10 116328 0.39 0.50 Hex#iswater > 3.99 786.30 41.28 299016 0.14 0.14 Fixnum#>= > 3.88 826.45 40.15 320307 0.13 0.13 Array#[] > 3.62 863.95 37.50 304378 0.12 0.12 Fixnum#+ > 2.65 891.41 27.47 199575 0.14 0.14 Fixnum#< > 2.48 917.11 25.69 220668 0.12 0.12 Fixnum#== > 2.28 940.71 23.61 24975 0.95 38.81 Object#offshore > ... >