简短版:下面的 Ruby 分析器输出中
的来源是什么[global]#[no method]
,有什么办法可以消除它或减少它的时间?它占用了我的方法总执行时间的 50% 以上,这是我无法解释的分析器结果的唯一部分。
长版:
我正在使用ruby-prof
gem 来分析下面的 Ruby 代码。该方法find_median_sorted_arrays
采用两个排序数组,并将它们的中值作为浮点数返回(因此得名)。这个问题来自一个编码挑战网站,我决定在我的解决方案上运行一个分析器,因为显然 80% 的提交的 Ruby 解决方案比我的运行得更快。
请注意,Ruby 版本是ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
:
def find_median_sorted_arrays(nums1, nums2)
sorted_array = [nil] * (nums1.length + nums2.length)
nums1_counter, nums2_counter = 0, 0
sorted_array.each_with_index do |num, index|
if nums2_counter >= nums2.length || (nums1[nums1_counter] && nums1[nums1_counter] < nums2[nums2_counter])
sorted_array[index] = nums1[nums1_counter]
nums1_counter += 1
else
sorted_array[index] = nums2[nums2_counter]
nums2_counter += 1
end
end
return median(sorted_array)
end
def median(array)
len = array.length
(array[(len - 1) / 2] + array[len / 2]) / 2.0
end
nums1 = [1,2]
nums2 = [3,4]
RubyProf.start
find_median_sorted_arrays(nums1, nums2)
result = RubyProf.stop
printer = RubyProf::FlatPrinter.new(result)
printer.print(STDOUT)
输出如下:
%self total self wait child calls name
58.56 0.000 0.000 0.000 0.000 1 [global]#[no method]
11.60 0.000 0.000 0.000 0.000 1 Array#each
11.60 0.000 0.000 0.000 0.000 1 Object#find_median_sorted_arrays
6.63 0.000 0.000 0.000 0.000 1 Array#*
4.42 0.000 0.000 0.000 0.000 1 Fixnum#/
4.42 0.000 0.000 0.000 0.000 1 Object#median
2.76 0.000 0.000 0.000 0.000 1 Enumerable#each_with_index
正如我在简短版本中提到的,[global]#[no method]
它占用了我的方法总执行时间的 50% 以上,这是我无法解释的分析器结果的唯一部分。这是从哪里来的,有没有办法消除它或减少它的时间?