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 вызовов в мс. Это немного медленно, но, вероятно, только потому, что это профилируется. Я не вижу в этом ничего необычного.