ruby-prof говорит, что оператор увеличения Ruby (+=) занимает 25 секунд

Я пытаюсь профилировать некоторый код Ruby, который я написал, используя ruby-prof жемчужина и увидеть, что основные операции, такие как i += 1 (указан как Fixnum#+ в приведенной ниже таблице) для запуска потребуется более 24 секунд (в данном конкретном тесте операция выполняется 2199978 раз). Это нормально?

Thread 582936

%Total   %Self   Total   Self  Wait  Child       Calls              Name

                 203.93  81.72   0.00  122.21    100001/100001    InputFile#parse
46.96%   18.82%  203.93  81.72   0.00  122.21    100001           InputFile#split_on_semicolon
                  24.59  24.59   0.00    0.00   2199978/3200094   Fixnum#+
                  16.02  16.02   0.00    0.00    100001/399998    String#split
                  14.72  14.72   0.00    0.00    999990/999991    String#[]
                  13.12  13.12   0.00    0.00   1199988/1199990   Fixnum#<
                  10.97  10.97   0.00    0.00    999990/2239978   String#empty?
                  10.49  10.49   0.00    0.00   1199988/1199988   String#<<
                   9.75   9.75   0.00    0.00   1199988/1200074   Array#[]
                   7.77   7.77   0.00    0.00    999990/999990    String#eql?
                   6.76   6.76   0.00    0.00    599994/599994    Fixnum#-
                   4.62   4.62   0.00    0.00    599994/599994    Array#delete_at
                   1.25   1.25   0.00    0.00    100001/1339989   Kernel#nil?
                   1.14   1.14   0.00    0.00    100001/300003    Array#size
                   1.01   1.01   0.00    0.00    100001/300002    Fixnum#>

1 ответ

Решение

Ваши результаты не говорят += занимает 25 секунд. Говорят, что 2199978 звонков + заняло 24,59 секунд, что составляет 89,5 вызовов в мс. Это немного медленно, но, вероятно, только потому, что это профилируется. Я не вижу в этом ничего необычного.

Другие вопросы по тегам