Actions
Bug #12373
closedOptimize CSV#shift
Description
I think that str1.start_with?(str2)
is faster than str1[0] == str2
.
Because str1.start_with?(str2)
just call String#start_with?
, But str1[0] == str2
call String#[]
, make new String
object and call String#==
.
(The patch is csv-shift.patch)
Benchmark results.
csv-benchmark.rb make temp CSV file and call CSV#each
method(inner call CSV#shift
)
$ ruby csv-benchmark.rb
Warming up --------------------------------------
old_csv_shift 1.000 i/100ms
new_csv_shift 1.000 i/100ms
Calculating -------------------------------------
old_csv_shift 0.444 (± 0.0%) i/s - 3.000 in 6.759200s
new_csv_shift 0.479 (± 0.0%) i/s - 3.000 in 6.264069s
Comparison:
new_csv_shift: 0.5 i/s
old_csv_shift: 0.4 i/s - 1.08x slower
string-start_with.rb is a micro benchmark for str1[0] == str2
and str1.start_with?(str2)
$ ruby string-start_with.rb
Warming up --------------------------------------
a[0] == b 90.881k i/100ms
a.start_with?(b) 115.557k i/100ms
Calculating -------------------------------------
a[0] == b 1.836M (± 3.8%) i/s - 9.179M in 5.006568s
a.start_with?(b) 3.183M (± 4.2%) i/s - 15.947M in 5.018654s
Comparison:
a.start_with?(b): 3183386.0 i/s
a[0] == b: 1836263.5 i/s - 1.73x slower
Of course $ make test-all TESTS="test/csv/*" passed
Files
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0