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

时间:2009-01-26 15:15:11

标签: ruby performance profiling

我编写了一个Ruby应用程序,它从不同格式的源,html,xml和csv文件中解析大量数据。如何找出代码中哪些区域占用时间最长?

有没有关于如何提高Ruby应用程序性能的好资源?或者您是否遵循始终遵循的任何性能编码标准?

例如,您是否始终使用

加入字符串
output = String.new
output << part_one
output << part_two
output << '\n'

或者你会使用

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

5 个答案:

答案 0 :(得分:10)

嗯,有一些众所周知的做法,如字符串连接比“#{value}”慢,但为了找出脚本消耗的大部分时间或时间超过要求的时间,你需要进行性能分析。有一种名为ruby-prof的红宝石。探查器甚至可以引起您可能很少发生的性能问题。我一直在使用它,发现它非常有用。以下是有关它的official site

的一些信息
  

ruby​​-prof是一个快速代码分析器   红宝石。其功能包括:

     

速度 - 它是一个C扩展,因此比它快很多倍   标准的Ruby profiler。

     

模式 - Ruby prof可以测量许多不同的参数,   包含           呼叫时间,内存使用和对象分配。

     

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

     

平面配置文件 - 类似于标准Ruby生成的报告   分析器

     

图形配置文件 - 与GProf类似,它们显示方法运行的时间,   哪种方法称之为哪种方法   它所称的方法。

     

调用树配置文件 - 以calltree格式输出结果   适合KCacheGrind分析   工具。

     

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

     

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

答案 1 :(得分:3)

答案 2 :(得分:3)

您可以使用标准Benchmark module来测试代码各个部分的效果。

你也可以在不同的Ruby实现上测试你的代码(例如1.9,Rubinius),看看是否能加快速度。

当然,如果你的问题本质上是算法的,那么担心字符串连接速度等问题并没有太多的意义......

答案 3 :(得分:1)

除了上面的内容,我还建议您观看Scaling Ruby截屏视频。它有一些关于如何编写更快的Ruby代码的有趣提示和技巧。

答案 4 :(得分:0)

您还可以在dTraceToolkit中使用一组适用于Ruby的dTrace工具