2012-07-30 67 views
-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#> 
+0

將2,199,978除以25000(毫秒)會產生〜87毫秒的每次操作。這對我來說似乎很慢(即使是Ruby),只需一個簡單的增量操作即可。這個測試真的是這樣嗎?如果你使用'i = i + 1'而不是使用'+ ='運算符會發生什麼? – 2012-07-30 23:35:57

+3

@SunilD。這是每毫秒87個電話,這仍然是緩慢的,但它是有道理的,因爲它正在被分析。除了有人問這是否正常之外,這裏對我來說似乎並不陌生。我的回答:是的,這很正常。 – 2012-07-30 23:38:33

+0

@Darshan計算,好點!我從來沒有在Ruby中描述過,但是當我在AS3中完成時,一切都非常緩慢。不知道爲什麼沒有發生在我身上。此外,我沒有看到它是電話/毫秒,也許我需要更多的咖啡:) – 2012-07-30 23:42:48

回答

3

您的結果不說+=需要25秒。他們說2199978對+的呼叫耗時24.59秒,每毫秒89.5個呼叫。這有點慢,但可能只是因爲它被分析。我沒有看到任何不尋常的事情。

+0

感謝澄清。我以ruby-prof的方式推出了ruby程序,所以我忘記比較沒有輪廓儀需要多長時間。當我在沒有ruby-prof的情況下運行程序時,程序在30秒內完成。 – 2012-07-31 21:39:53