diff options
author | Sam <sam.saffron@gmail.com> | 2013-08-29 12:23:15 +1000 |
---|---|---|
committer | Sam <sam.saffron@gmail.com> | 2013-08-29 14:06:24 +1000 |
commit | ba0568e46d890d57cfef2ea86745bdeb879fefa7 (patch) | |
tree | 48fdff238fe7234fca5bc343ce358ec3cfd1a3b3 /activerecord | |
parent | fb321017b6eab5c3f0c0c3187585674412ec53ae (diff) | |
download | rails-ba0568e46d890d57cfef2ea86745bdeb879fefa7.tar.gz rails-ba0568e46d890d57cfef2ea86745bdeb879fefa7.tar.bz2 rails-ba0568e46d890d57cfef2ea86745bdeb879fefa7.zip |
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 |