2009-01-26 52 views
5

我已經編寫了一個Ruby應用程序,用於解析來自不同格式html,xml和csv文件的大量源數據。我怎樣才能找出代碼中哪些部分最長?如何找到我的Ruby應用程序中的性能瓶頸?

關於如何提高Ruby應用程序的性能,有沒有什麼好的資源?還是你有任何性能編碼標準,你總是遵循?

例如你總是

output = String.new 
output << part_one 
output << part_two 
output << '\n' 

加入您的字符串或者你可以使用

output = "#{part_one}#{part_two}\n" 

回答

10

好,有一定的像字符串連接這樣的衆所周知的做法比「#{value}」慢得多,但爲了找出腳本消耗大部分時間或更多時間比需要的,你需要做剖析。有一種叫ruby-prof的紅寶石寶石。分析器可以引起您的注意,甚至可能很少發生的性能問題。我一直在使用它,發現它非常有幫助。這裏是直接從它的official site

紅寶石教授一些關於它的信息是 Ruby的快速代碼探查。它的功能包括:

速度 - 這是一個C擴展,因此比標準Ruby探查器的標準要快很多倍。

模式 - 紅寶石教授可以測量多個不同的參數,包括 呼叫 倍,內存使用和對象的分配。

報告 - 可以生成文本和交叉引用的HTML報告

扁平型材 - 類似於標準的Ruby 探查

圖形輪廓生成的報告 - 類似GProf使用,這些顯示了方法運行的時間長度, 哪些方法調用了方法,以及調用了哪個方法 。

調用樹型材 - 在calltree格式 適合KCacheGrind剖析 工具的輸出結果。

線程 - 支持剖析多個線程同時

遞歸調用 - 支持剖析遞歸方法調用

3

您可以用標準的Benchmark module測試代碼各部分的性能。你也可以在不同的Ruby實現上測試你的代碼(例如1.9,Rubinius),看看它是否能夠加快速度。

當然,如果你的問題在本質上是算法,然後有沒有在擔心的事情像字符串連接速度太多點......

0

還有一組的DTrace工具Ruby中,你可以在dTraceToolkit使用

1

除了上面寫的內容外,我還推薦觀看Scaling Ruby截屏視頻。它有一些有趣的提示&如何編寫更快的Ruby代碼的技巧。

+0

感謝您的提示。那些Rails嫉妒的人很出色。 – Geekygecko 2009-01-28 22:42:58