Feature #9143
closedOptimize CSV to share hash key objects between rows
Description
Currently, when CSV headers are strings, then each row receives a copy of the strings for hash keys. This patch is an optimization to share the same frozen string keys between all rows.
Please verify: in the implementation of Hash::[]
, are strings the only object that is dup'd, or should other types be frozen so they aren't copied for each row too?
Files
Updated by avit (Andrew Vit) about 9 years ago
Note, this can be worked around by doing csv.header_converters << proc{|h| h.freeze }
but I think there should be some built-in optimization for this.
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
=begin
You can use (({assert_instance_of})) and (({assert_same})).
=end
Updated by avit (Andrew Vit) about 9 years ago
Thanks nobu, I write too much RSpec lately.
Updated patch attached: I also added freeze in Row#initialize, not sure if both places are needed, or which is better. Please review.
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
assert_predicate(string_key, :frozen?) will show better message when it fails.
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
- Status changed from Open to Assigned
- Assignee set to JEG2 (James Gray)
Updated by JEG2 (James Gray) about 9 years ago
- Status changed from Assigned to Closed
- % Done changed from 50 to 100