Bug #12373
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
I think that **`str1.start_with?(str2)`** **str1.start_with?(str2)** is faster than **`str1[0] **str1[0] == str2`**. str2**. Because **`str1.start_with?(str2)`** **str1.start_with?(str2)** just call **`String#start_with?`**, **String#start_with?**, But **`str1[0] **str1[0] == str2`** str2** call **`String#[]`**, **String#[]**, make new `String` String object and call **`String#==`**. **String#==**. (The patch is csv-shift.patch) Benchmark results. csv-benchmark.rb make temp CSV file and call **`CSV#each`** **CSV#each** method(inner call **`CSV#shift`**) **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] **str1[0] == str2`** str2** and **`str1.start_with?(str2)`** **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