如何找到我的Ruby应用程序中的性能瓶颈?

问题描述:

我已经编写了一个Ruby应用程序,用于解析来自不同格式html,xml和csv文件的大量源数据。我怎样才能找出代码中哪些部分最长?如何找到我的Ruby应用程序中的性能瓶颈?

关于如何提高Ruby应用程序的性能,有没有什么好的资源?还是你有任何性能编码标准,你总是遵循?

例如你总是

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

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

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

好,有一定的像字符串连接这样的众所周知的做法比“#{value}”慢得多,但为了找出脚本消耗大部分时间或更多时间比需要的,你需要做剖析。有一种叫ruby-prof的红宝石宝石。分析器可以引起您的注意,甚至可能很少发生的性能问题。我一直在使用它,发现它非常有帮助。这里是直接从它的official site

红宝石教授一些关于它的信息是 Ruby的快速代码探查。它的功能包括:

速度 - 这是一个C扩展,因此比标准Ruby探查器的标准要快很多倍。

模式 - 红宝石教授可以测量多个不同的参数,包括 呼叫 倍,内存使用和对象的分配。

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

扁平型材 - 类似于标准的Ruby 探查

图形轮廓生成的报告 - 类似GProf使用,这些显示了方法运行的时间长度, 哪些方法调用了方法,以及调用了哪个方法 。

调用树型材 - 在calltree格式 适合KCacheGrind剖析 工具的输出结果。

线程 - 支持剖析多个线程同时

递归调用 - 支持剖析递归方法调用

您可以用标准的Benchmark module测试代码各部分的性能。你也可以在不同的Ruby实现上测试你的代码(例如1.9,Rubinius),看看它是否能够加快速度。

当然,如果你的问题在本质上是算法,然后有没有在担心的事情像字符串连接速度太多点......

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

除了上面写的内容外,我还推荐观看Scaling Ruby截屏视频。它有一些有趣的提示&如何编写更快的Ruby代码的技巧。

+0

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