From: tadayoshi funaba Date: 2011-03-02T20:29:44+09:00 Subject: [ruby-core:35412] [Ruby 1.9 - Feature #4452] [Rejected] Speedup Date._parse and Date._strptime by using a plain Hash Issue #4452 has been updated by tadayoshi funaba. Status changed from Open to Rejected now i'm planning some improvements for formating method of date. i may rewrite some methods in c. thanks. ---------------------------------------- Feature #4452: Speedup Date._parse and Date._strptime by using a plain Hash http://redmine.ruby-lang.org/issues/4452 Author: Jeremy Evans Status: Rejected Priority: Normal Assignee: tadayoshi funaba Category: Target version: This is pretty much a duplicate of #3667, but since you can't reopen tickets and I didn't get a response to the question I posted after it was closed, I'm resubmitting it. Date._parse and Date._strptime currently use a Date::Format::Bag instance to hold some temporary data. This is a subclass of Date::Format::BagStruct which is a subclass of Struct. There are no other users of this class and it is a private (nodoc) class. It is much faster to switch the code to use a plain hash instead of Date::Format::Bag, 66% faster for Date._parse and 25% faster for Date._strptime: $ ruby -v ruby 1.9.3dev (2011-02-28 trunk 30975) [x86_64-openbsd4.9] $ time ruby -r date -I date-struct -e "50000.times{Date._parse('2010-12-25')}" real 0m3.673s user 0m3.660s sys 0m0.010s $ time ruby -r date -I date-hash -e "50000.times{Date._parse('2010-12-25')}" real 0m2.219s user 0m2.200s sys 0m0.020s $ time ruby -r date -I date-struct -e "50000.times{Date._strptime('2010-12-25 10:20:30', '%F %T')}" real 0m8.715s user 0m8.710s sys 0m0.000s $ time ruby -r date -I date-hash -e "50000.times{Date._strptime('2010-12-25 10:20:30', '%F %T')}" real 0m6.980s user 0m6.970s sys 0m0.000s > 3.673/2.219 => 1.655250112663362 > 8.715/6.980 => 1.248567335243553 The only advantage to the current code is that you can use nicer looking accessor methods: e.d # instead of e[:d] e.d = 1 # instead of e[:d] = 1 However, in this case the performance increase greatly outweighs that issue. -- http://redmine.ruby-lang.org