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

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

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

例如,你总是加入你的字符串

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

或者你会用吗?

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

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

ruby-prof是Ruby的快速代码分析器。 其function包括:

速度 – 它是C扩展,因此比标准Ruby分析器快许多倍。

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

报告 – 可以生成文本和交叉引用的html报告

Flat Profiles – 类似于标准Ruby Profiler生成的报告

图形配置文件 – 类似于GProf,它们显示了一个方法运行的时间,调用它的方法以及它调用的方法。

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

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

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

您可以使用标准Benchmark模块测试各个代码段的性能。

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

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

字符串连接的答案如下: https : //web.archive.org/web/20090122123342/http : //blog.cbciweb.com/2008/06/10/ruby-performance-use-double-quotes-vs -单引号

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

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