From: "phasis68 (Heesob Park)" Date: 2013-12-08T19:56:18+09:00 Subject: [ruby-core:58967] [ruby-trunk - Bug #9221] Time.parse performance becomes exponentially worse as string length grows Issue #9221 has been updated by phasis68 (Heesob Park). It can be reproduced on ruby 2.0.0-p247 i386-mingw32. I modified a test code to do not use extension library. C:\work>ruby -v ruby 2.0.0p247 (2013-06-27) [i386-mingw32] C:\work>type test.rb require 'benchmark' str = "12:00 PM fffffffffffffffffffffffffffff" pat=/((?:\d+\s*:\s*\d+(?:\s*:\s*\d+(?:[,.]\d*)?)?|\d+\s*h(?:\s*\d+m?(?:\s*\d+s?) ?)?)(?:\s*[ap](?:m\b|\.m\.))?|\d+\s*[ap](?:m\b|\.m\.))(?:\s*((?:gmt|utc?)?[-+]\d +(?:[,.:]\d+(?::\d+)?)?|[[:alpha:].\s]+(?:standard|daylight)\stime\b|[[:alpha:]] +(?:\sdst)?\b))?/i p Benchmark.measure { pat.match(str) } C:\work>ruby test.rb # Interestingly, this issue is not reproduced on irb session or without filename. C:\work>ruby < test.rb # C:\work>irb DL is deprecated, please use Fiddle irb(main):001:0> require 'benchmark' => true irb(main):002:0> str = "12:00 PM fffffffffffffffffffffffffffff" => "12:00 PM fffffffffffffffffffffffffffff" <:].\s]+(?:standard|daylight)\stime\b|[[:alpha:]]+(?:\sdst)?\b))?/i => /((?:\d+\s*:\s*\d+(?:\s*:\s*\d+(?:[,.]\d*)?)?|\d+\s*h(?:\s*\d+m?(?:\s*\d+s?)? )?)(?:\s*[ap](?:m\b|\.m\.))?|\d+\s*[ap](?:m\b|\.m\.))(?:\s*((?:gmt|utc?)?[-+]\d+ (?:[,.:]\d+(?::\d+)?)?|[[:alpha:].\s]+(?:standard|daylight)\stime\b|[[:alpha:]]+ (?:\sdst)?\b))?/i irb(main):004:0> p Benchmark.measure { pat.match(str) } # => # ---------------------------------------- Bug #9221: Time.parse performance becomes exponentially worse as string length grows https://bugs.ruby-lang.org/issues/9221#change-43517 Author: mpelzsherman (Michael Pelz-Sherman) Status: Open Priority: Normal Assignee: Category: core Target version: current: 2.1.0 ruby -v: ruby-2.0.0-p247 Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN See attached script. Output: parsing 12:00 PM fffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.010443 parsing 12:00 PM ffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.017739 parsing 12:00 PM fffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.028127 parsing 12:00 PM ffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.049885 parsing 12:00 PM fffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.071379 parsing 12:00 PM ffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.112612 parsing 12:00 PM fffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.184517 parsing 12:00 PM ffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.293784 parsing 12:00 PM fffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.476253 parsing 12:00 PM ffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 0.786087 parsing 12:00 PM fffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 1.256976 parsing 12:00 PM ffffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 2.019426 parsing 12:00 PM fffffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 3.300646 parsing 12:00 PM ffffffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 5.37757 parsing 12:00 PM fffffffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 8.763601 parsing 12:00 PM ffffffffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 14.165842 parsing 12:00 PM fffffffffffffffffffffffffffffffff 2013-12-05 12:00:00 -0500 elapsed: 23.888907 ... -- http://bugs.ruby-lang.org/