Project

General

Profile

Actions

Feature #9143

closed

Optimize CSV to share hash key objects between rows

Added by avit (Andrew Vit) over 10 years ago. Updated over 10 years ago.

Status:
Closed
Target version:
-
[ruby-core:58510]

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

csv-freeze-headers.patch (1.33 KB) csv-freeze-headers.patch avit (Andrew Vit), 11/23/2013 05:05 AM
csv-freeze-headers-2.patch (2.1 KB) csv-freeze-headers-2.patch avit (Andrew Vit), 11/24/2013 08:35 AM

Updated by avit (Andrew Vit) over 10 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) over 10 years ago

=begin
You can use (({assert_instance_of})) and (({assert_same})).
=end

Updated by avit (Andrew Vit) over 10 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) over 10 years ago

assert_predicate(string_key, :frozen?) will show better message when it fails.

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Status changed from Open to Assigned
  • Assignee set to JEG2 (James Gray)

Updated by JEG2 (James Gray) over 10 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 50 to 100
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0