我编写了一个Ruby应用程序,它从不同格式的源,html,xml和csv文件中解析大量数据。如何找出代码中哪些区域占用时间最长?
有没有关于如何提高Ruby应用程序性能的好资源?或者您是否遵循始终遵循的任何性能编码标准?
例如,您是否始终使用
加入字符串output = String.new
output << part_one
output << part_two
output << '\n'
或者你会使用
output = "#{part_one}#{part_two}\n"
答案 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工具