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

发布于 2024-07-11 20:16:49 字数 356 浏览 6 评论 0原文

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

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

例如,您是否总是将字符串与

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

或将使用

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

I have written a Ruby application which parses lots of data from sources in different formats html, xml and csv files. How can I find out what areas of the code are taking the longest?

Is there any good resources on how to improve the performance of Ruby applications? Or do you have any performance coding standards you always follow?

For example do you always join your string with

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

or would you use

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

提笔书几行 2024-07-18 20:16:49

嗯,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但为了找出脚本在哪里消耗了大部分时间或比所需时间更多的时间,您需要进行分析。 有一种红宝石叫做 ruby​​-prof。 即使是那些很少发生的性能问题,分析器也可以引起您的注意。 我已经经常使用它并且发现它非常有帮助。 以下是直接来自其官方网站的一些信息

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

速度 - 它是 C 扩展,因此比
标准 Ruby 分析器。

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

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

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

图形配置文件 - 与 GProf 类似,这些显示了方法运行的时间,
哪些方法调用它以及哪些
它调用的方法。

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

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

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

Well, there are certain well known practices like string concatenation is way slower than "#{value}" but in order to find out where you script is consuming most of its time or more time than required, you need to do profiling. There is a ruby gem called ruby-prof. The profiler can bring to your notice even those performance issues that may rarely occur. I have been using it a lot and find it very helpful. Here is some information about it directly from its official site

ruby-prof is a fast code profiler for
Ruby. Its features include:

Speed - it is a C extension and therefore many times faster than the
standard Ruby profiler.

Modes - Ruby prof can measure a number of different parameters,
including
call times, memory usage and object allocations.

Reports - can generate text and cross-referenced html reports

Flat Profiles - similar to the reports generated by the standard Ruby
profiler

Graph profiles - similar to GProf, these show how long a method runs,
which methods call it and which
methods it calls.

Call tree profiles - outputs results in the calltree format
suitable for the KCacheGrind profiling
tool.

Threads - supports profiling multiple threads simultaneously

Recursive calls - supports profiling recursive method calls

幻想少年梦 2024-07-18 20:16:49

您可以使用标准 基准模块

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

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

You can test the performance of individual sections of code with the standard Benchmark module.

You could also test your code on different implementations of Ruby (eg 1.9, Rubinius) and see if that speeds things up.

Of course if your problems are algorithmic in nature then there's not too much point in worrying about things like string concatenation speeds...

匿名。 2024-07-18 20:16:49

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

Besides what's written above I also recommend watching the Scaling Ruby screencast. It has some interesting tips&tricks on how to write faster Ruby code.

心病无药医 2024-07-18 20:16:49

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

There is also a set of dTrace tools for Ruby you can use in the dTraceToolkit

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文