-1
我想简要介绍一下Ruby代码使用我的宝石ruby-prof
写道,看到喜欢i += 1
是基本操作(如Fixnum#+
在表中列出以下)接手24要运行的秒数(在这个特定的测试中,该操作执行2,199,978次)。这是正常的吗?红宝石教授表示红宝石递增运算符(+ =)需要25秒
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#>
将2,199,978除以25000(毫秒)会产生〜87毫秒的每次操作。这对我来说似乎很慢(即使是Ruby),只需一个简单的增量操作即可。这个测试真的是这样吗?如果你使用'i = i + 1'而不是使用'+ ='运算符会发生什么? – 2012-07-30 23:35:57
@SunilD。这是每毫秒87个电话,这仍然是缓慢的,但它是有道理的,因为它正在被分析。除了有人问这是否正常之外,这里对我来说似乎并不陌生。我的回答:是的,这很正常。 – 2012-07-30 23:38:33
@Darshan计算,好点!我从来没有在Ruby中描述过,但是当我在AS3中完成时,一切都非常缓慢。不知道为什么没有发生在我身上。此外,我没有看到它是电话/毫秒,也许我需要更多的咖啡:) – 2012-07-30 23:42:48