私はRubyのプロファイリングが新しく、ruby-prof
のようなものが一般的です。私はちょうど宝石をインストールし、私のプログラムを起動さ:ruby-profにRubyコア/標準ライブラリ/ gemメソッドを無視させるにはどうすればよいですか?
ruby-prof ./my-prog.rb
すべてのRubyのコアと標準ライブラリのメソッドのデータをプロファイリング、およびその他の宝石が含まれているためしかし、出力は、非常に冗長です。例えば、上位3行は、次のとおりです。私はすでに文字列と配列多くのことを、そしておそらくそれらのクラスで私のプログラムのお得な情報がすでに地獄が出て最適化されていたことを知っているので、私のためにリモートで有用な情報ではありません
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
そのうちの。私は私のコードのホットスポットだけを気にします。
私はいくつかの他のプリンタモードを試しました。と-p call_stack
ですが、すべて同じ問題があります。
-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-prof
は、いくつかの方法の除去及び簡素化をサポートしていることがわかりRuby core/stdlibのコード内で時間が経過し、他の宝石はコード内で経過した時間としてカウントされます。
私は自分のコードの間の経過時間の内訳を見てみたいん当時とのみ、私のコードが原因何千回としませ好調と呼ばれることにパフォーマンス上のボトルネックになっている方法foo
を持っていることがわかりますしたらその特定のメソッド内で呼び出されるコア/ライブラリコードが含まれます。
これは標準の機能ではありませんなぜ私はそれが誰もが何をしたいのかだと期待するので、私は、理解することはできません。潜在的に、最初に独自のコードをプロファイリングし、その後、最適化するために、物事を使い果たししたらあなたが使用する宝石やRuby core/stdlibの最適化を開始してください。私は何が欠けていますか?
答えてくれてありがとう、私のテストスイートは、すでにRSpecの中に書かれています。私は 'profile'を行っていくつもりですが、そのブログは結果を汚染するライブラリメソッドの問題とまったく同じ問題を抱えているようです。 –
ええ、それは確かに答えの正確な一致ではありませんが、あなたを近づけるかもしれません。そして、RSpecを使う限り、彼らがどのように最小限にしたのか見ていくと、手がかりが得られるかもしれません。 RSpecはちょうどRubyで、それを開いて修正します...そしておそらく機能を提出してください! – vgoff