Project

General

Profile

Actions

Feature #4452

closed

Speedup Date._parse and Date._strptime by using a plain Hash

Added by jeremyevans0 (Jeremy Evans) about 13 years ago. Updated about 13 years ago.

Status:
Rejected
Target version:
-
[ruby-core:<unknown>]

Description

=begin
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.
=end


Files

date_format.patch (17.7 KB) date_format.patch jeremyevans0 (Jeremy Evans), 03/01/2011 10:46 AM
Actions #1

Updated by jeremyevans0 (Jeremy Evans) about 13 years ago

=begin
The patch in #3667 pretty much applies except for the first hunk, so here's an updated patch against trunk.
=end

Updated by tadf (tadayoshi funaba) about 13 years ago

  • Status changed from Open to Rejected

=begin
now i'm planning some improvements for formating method of date.
i may rewrite some methods in c.

thanks.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0