diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-09-03 12:08:04 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-09-03 12:08:04 -0700 |
commit | c64a001dcc9eb1b066ca3ce553c5d20988458e8c (patch) | |
tree | 23bc47159e5a11e046d873d7c18a720fa9e7b6ba /activerecord | |
parent | 863c488bb05de3b38a81fa37349977adc0db59e3 (diff) | |
parent | ba0568e46d890d57cfef2ea86745bdeb879fefa7 (diff) | |
download | rails-c64a001dcc9eb1b066ca3ce553c5d20988458e8c.tar.gz rails-c64a001dcc9eb1b066ca3ce553c5d20988458e8c.tar.bz2 rails-c64a001dcc9eb1b066ca3ce553c5d20988458e8c.zip |
Merge pull request #12065 from SamSaffron/result_optimisation
Perf: micro optimised Result column hash_row creation
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/result.rb | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/result.rb b/activerecord/lib/active_record/result.rb index 253368ae5b..d0f1cb5b75 100644 --- a/activerecord/lib/active_record/result.rb +++ b/activerecord/lib/active_record/result.rb @@ -93,7 +93,21 @@ module ActiveRecord # used as keys in ActiveRecord::Base's @attributes hash columns = @columns.map { |c| c.dup.freeze } @rows.map { |row| - Hash[columns.zip(row)] + # In the past we used Hash[columns.zip(row)] + # though elegant, the verbose way is much more efficient + # both time and memory wise cause it avoids a big array allocation + # this method is called a lot and needs to be micro optimised + hash = {} + + index = 0 + length = columns.length + + while index < length + hash[columns[index]] = row[index] + index += 1 + end + + hash } end end |