如何找到我的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使用
感谢您的提示。那些Rails嫉妒的人很出色。 – Geekygecko 2009-01-28 22:42:58