首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让ruby-prof忽略Ruby核心/标准库/ gem方法?

如何让ruby-prof忽略Ruby核心/标准库/ gem方法?
EN

Stack Overflow用户
提问于 2013-08-11 11:57:33
回答 2查看 1.2K关注 0票数 6

我对Ruby很陌生,而且ruby-prof似乎是一个很受欢迎的选择。我刚刚安装了gem并调用了我的程序:

代码语言:javascript
复制
ruby-prof ./my-prog.rb

但是,输出非常冗长,因为所有Ruby核心和标准库方法以及其他gems的分析数据都包括在内。例如,前三行是:

代码语言:javascript
复制
8.79      0.011     0.010     0.000     0.001     3343  *String#% 
7.28      0.078     0.009     0.000     0.069     2068  *Array#each 
4.93      0.038     0.006     0.000     0.032     1098  *Array#map 

这对我来说一点都不有用,因为我已经知道我的程序经常处理String和数组,而且这些类可能已经被优化过了。我只关心代码中的热点。

我尝试了其他一些打印机模式,例如-p graph_html-p call_stack,但它们都有相同的问题。

我看到ruby-prof支持某种方法的消除和简化:

代码语言:javascript
复制
-x, --exclude regexp             exclude methods by regexp (see method elimination)
-X, --exclude-file file          exclude methods by regexp listed in file (see method elimination)
    --exclude-common-cycles      make common iterators like Integer#times appear inlined
    --exclude-common-callbacks   make common callbacks invocations like Integer#times appear

但是,似乎没有任何明显的方法来获得我真正想要的东西,这就是只为我的代码分析数据,也就是说,随着Ruby / stdlib代码内部的时间流逝,其他的gems只被计算为代码中经过的时间。

一旦我看到我的代码有一个方法foo,这是一个性能瓶颈,因为它被调用了数千次,而且性能不佳,那么,我只想看到代码与在该特定方法中调用的核心/库代码之间所经过的时间的细分。

我不明白为什么这不是一个标准特性,因为我希望这是每个人都想做的事情:首先分析您自己的代码,然后在需要优化的东西用完之后,可能会开始优化您使用的宝石,甚至是Ruby core / stdlib。我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2013-08-11 16:38:57

我同意这是红宝石教授的大问题。我倾向于喜欢perftools.rb。它与喷雾器集成,并支持各种聚焦和忽略选项,以及图形报表,这些报表对于快速理解热点及其呼叫树具有很好的优势。

对于ruby,您也可以尝试输出KCacheGrind格式并使用KCacheGrind查看器进行分析。它有许多可视化模式,并便于自组织过滤和对结果的探索。

票数 2
EN

Stack Overflow用户

发布于 2013-08-11 12:51:53

您可能需要通过测试来分析和测试。Minitest在他们的测试框架中允许这样做。这样你就可以专注于特定的行为来获得你的时间。

可在Ruby2.0或Ruby1.9及更低版本的Gem中使用。

至于以同样的方式进行分析,require 'profile'并将其用于相同的测试。

这个博客帖子详细介绍了如何做到这一点,我不认为它已经发生了很大的变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18171675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档