如何找到我的 Ruby 应用程序中的性能瓶颈?
Posted
技术标签:
【中文标题】如何找到我的 Ruby 应用程序中的性能瓶颈?【英文标题】:How can I find the performance bottlenecks in my Ruby application? 【发布时间】:2009-01-26 15:15:11 【问题描述】:我编写了一个 Ruby 应用程序,它可以解析来自不同格式 html、xml 和 csv 文件的大量数据。如何找出代码的哪些区域花费的时间最长?
有没有关于如何提高 Ruby 应用程序性能的好资源?或者您是否有始终遵循的性能编码标准?
例如,你总是用
加入你的字符串吗?output = String.new
output << part_one
output << part_two
output << '\n'
或者你会使用
output = "#part_one#part_two\n"
【问题讨论】:
【参考方案1】:嗯,有一些众所周知的做法,比如字符串连接比“#value”慢得多,但为了找出脚本在哪里消耗了大部分时间或超过了所需时间,你需要进行分析.有一种名为 ruby-prof 的红宝石宝石。分析器甚至可以让您注意到那些可能很少发生的性能问题。我一直在使用它,发现它很有帮助。这里有一些关于它的信息,直接来自它的official site
ruby-prof 是一个快速的代码分析器 红宝石。其特点包括:
速度 - 它是一个 C 扩展,因此比 标准 Ruby 分析器。
模式 - Ruby prof 可以测量许多不同的参数, 包含 调用时间、内存使用和对象分配。
报告 - 可以生成文本和交叉引用的 html 报告
Flat Profiles - 类似于标准 Ruby 生成的报告 分析器
图表配置文件 - 类似于 GProf,这些显示方法运行的时间, 哪些方法调用它,哪些 它调用的方法。
调用树配置文件 - 以调用树格式输出结果 适用于 KCacheGrind 分析 工具。
线程 - 支持同时分析多个线程
递归调用 - 支持分析递归方法调用
【讨论】:
【参考方案2】:您可以使用标准Benchmark module 测试各个代码段的性能。
您还可以在 Ruby 的不同实现(例如 1.9、Rubinius)上测试您的代码,看看这是否加快了速度。
当然,如果您的问题本质上是算法问题,那么担心字符串连接速度之类的问题就没有太大意义了...
【讨论】:
【参考方案3】:字符串拼接的答案在这里:https://web.archive.org/web/20090122123342/http://blog.cbciweb.com/2008/06/10/ruby-performance-use-double-quotes-vs-single-quotes
【讨论】:
【参考方案4】:除了上面写的内容,我还建议观看Scaling Ruby 截屏视频。它有一些关于如何编写更快的 Ruby 代码的有趣提示和技巧。
【讨论】:
感谢您的提示。那些 Rails Envy 的家伙太棒了。【参考方案5】:还有一组用于 Ruby 的 dTrace 工具,您可以在 dTraceToolkit 中使用
【讨论】:
以上是关于如何找到我的 Ruby 应用程序中的性能瓶颈?的主要内容,如果未能解决你的问题,请参考以下文章