- Notifications
You must be signed in to change notification settings - Fork 378
Open
Description
str.count("\n") is 1.3-170 times faster than str.lines.count or str.each_line.count (ref: https://serpapi.com/blog/lines-count-failed-deployments/). The speed difference grows with the lines count.
$ ruby tmp/string_count_benchmark.rb Warming up -------------------------------------- String#count('\n') 86.000 i/100ms String#lines.size 1.000 i/100ms String#lines.count 1.000 i/100ms String#each_line.count 1.000 i/100ms Calculating ------------------------------------- String#count('\n') 771.031 (± 6.6%) i/s - 3.870k in 5.041849s String#lines.size 4.785 (± 0.0%) i/s - 24.000 in 5.037242s String#lines.count 4.513 (± 0.0%) i/s - 23.000 in 5.112095s String#each_line.count 4.763 (± 0.0%) i/s - 24.000 in 5.075882s Comparison: String#count('\n'): 771.0 i/s String#lines.size: 4.8 i/s - 161.12x (± 0.00) slower String#each_line.count: 4.8 i/s - 161.87x (± 0.00) slower String#lines.count: 4.5 i/s - 170.86x (± 0.00) slowerBenchmark code:
require"benchmark/ips"HTML="\nruby\n" * 1024 * 1024deffastestHTML.count("\n")enddeffasterHTML.each_line.countenddeffastHTML.lines.lengthenddefslowHTML.lines.sizeendBenchmark.ipsdo |x| x.report("String#count('\\n')"){fastest}x.report("String#lines.size"){faster}x.report("String#lines.count"){fast}x.report("String#each_line.count"){slow}x.compare!endI'd like to add this benchmark to fast-ruby. Wdyt?
Based on our updates to the @guilhermesimoes' very helpful gist: https://gist.github.com/guilhermesimoes/d69e547884e556c3dc95?permalink_comment_id=4687645#gistcomment-4687645
Metadata
Metadata
Assignees
Labels
No labels