正規の Ruby 3.0 を起動する
を読み込むときは、1 つ弾丸は特に私の検索をキャッチしました。 Ruby 3.0 では、IRB は
対策 公開を開始しました。 デバッグ、コードの評価、または最新のコードの記述を行う際に、段階を追って小さな断片を作成する人として、私はすぐに興味をそそられました! IRB の最新の
measure 公開は、IRB コンソールからさまざまなスニペットを測定するための迅速かつ簡単な戦略です。
トグル対策
起動注意事項 が示したように、
measure (または
)、および measure :off
を使用してオフ*)
irb
(主要)> 測定 時間 は追加
=>
なし irb
>
スリープ 1 処理中
時間: 1.000649
s
=> 1
irb
> 1 処理中 時間: 0.000025s
=>
1 irb
>
メジャー :オフ=>
無し
デフォルトでは、上記で調べることができるように、IRB コンソールは処理時間を秒単位で出力します (time サイズ)。測定がオンになっている場合、すべての命令に対して。
Stackprof
起動メモを読んですぐに変身したら、
TIMEのメッセージが追加されました
この現代的なエクスポージャーでコードを測定できる手法がいくつかあることを意味するため、私の検索に引っかかりました! メジャーにはもう 1 つのデフォルト モードがあります: Stackprof.
Stackprof (rapid for Stack Profiler) は、Ruby コード用のサンプル名スタック プロファイラーです。 この方法論は、実行が行われているスタック内の場所でコードが実行されている間に、おそらく多くのサンプルを解決することができます。名前スタック。
measure :stackprof
.で Stackprof の測定を切り替えることができます。 Stackprof のパフォーマンスをデモンストレーションする前に、実際に何が起こっているのかを調査するために、整数を出力するよりも少しだけ大きなコード スニペットが必要です。 理想的には、約 1 回 (または数千回) バッスルします。 もう 2020 年ではないという議論の余地のない現実 (そして、Ruby 3 がさらに無限のプロシージャー定義を開始したこと) を祝い、次のスニペットを使用しましょう:
def スニペット
()=
10_000.回
{日にち。
パース(日にち
.現在 .
to_s).1年間
!= 2020
}
今、Stackprof を使用してスニペットを処理し、次の出力を調べることができます:
irb > 対策 :stackprof
STACKPROFは 追加した .=>
nil
irb
> スニペット ==================================モード: CPU
(1000) サンプル: 26
(0.00% 省略 価格) GC: 2 (7.69%)
==================================TOTAL
(pct)
サンプル
(pct
)
フレーム 11
(
42.3%
)
11 (
42.3
%) 正規表現 #マッチ 5
(19.2%) 5 (19.2
%
) 弦#gsub! 4 (15.4%) 4 (15.4
% )) 整数#div 2 (
7.7%) 2 (7.7%
)
MatchData#originate up
2
(7.7%
)
2 (
7.7
%) (スイープ)
1
(3.8 %) 1
(
3.8%
)
日にち。現在
1
(
3.8
% ) 1
(
3.8% ) 日付#to_s 24 (92.3
%) 0
(0.0%) IRB:: WorkSpace #評価 24
(92.3%) 0 (0.0
%
) IRB :: Irb#eval_input
24 (92.3%) 0 (0.0%)
IRB
.init_config
24 (92.3
%
) 0 (0.0%
)
StackProf.喧騒 24 (92.3%)
0) (0.0%
) IRB::
Irb#signal_status 24 (92.3%
)0 (0.0%) RubyLex#each_top_level_statement 24
(92.3%) 0 (0.0%(92.3%)カーネル#ループ 24
)0 (0.0
%)
カーネル#ホールドシャット 24
(92.3%
)0 (0.0%) IRB
:: Irb#bustle
24
(
92.3
%) 0
(0.0%
)IRB.発信元 24 (92.3%) 0 (0.0%
)<トップ
(
必要)>24 (
92.3%)
0(0.0%
)カーネル#load
24(92.3%) 0
(0.0%
)
<メイン
>24 (92.3%) 0 (0.0
% )) <メイン
>
24 (92.3%)
0
(0.0
%) カーネル
#eval24 (
92.3%) 0 ( 0.0
%
)
2 ( 7.7%) 0
(
0.0
%) (ごみ 品揃え)
24(92.3%
)0
(0.0%) 整数#回 24
(92.3%
)
0 (
0.0%) 物体#snippet 22
(84.6%)
0(0.0%) 日にち
.parse 24
(92.3%
)0 (
0.0%)
IRB:: コンテクスト#評価=> 10000
ハザ! カスタム コードをまったく使用せずに、IRB コンソールから Stackprof ファブルを取得しています!
出力をさらに表示するには、サンプルの数を確認しています。すべてのスタック体格で撮影され、それが何パーセントの時間に相当するか. 例として、原則は、
Regexp#match 体格で 11 個のサンプルが採取されたことを示しています。 終了時のヘッダーは、26 個のサンプルが採取されたことを示しています。 したがって、Stackprof はここで、時間の 11/26、つまり 42.3% が
Regexp#match に費やされていると推測しています。 この 42.3% は、
(pct) 列で表されます。 この流行では、Stackprof の出力により、さまざまなスタック フレームがコードの実行にどれだけの時間を費やしているかについて、許容できる見積もりが得られます。
さらに、
cpu モードでプロファイリングしているヘッダーを調べます。 この方法論 Stackprof は、CPU が動作している場所でミリ秒ごとにサンプルを解決します。 ただし、Stackprof には もっと多くのサンプリング モード
があります。 もう 1 つの注目を集めるのは、ウォール サンプリングです。これは、CPU の負荷があるかどうかに関係なく、スタウチ時間のミリ秒ごとにサンプルを取得します
実際には、構築された
メジャー :stackprof により、議論をすり抜けることができます。これは、Stackprof を騒がせようとしているモードです。 . 実例として、壁時間サンプリングを利用するために、
irb > 対策 :stackprof , :wall STACKPROF は 追加した。=> nil
irb
> snippet
==================================モード
:壁(
1000) サンプル
:56(0.00 % 省略 価格
)GC: 5 (8.93%)==================================合計 (pct) サンプル (pct) フレーム 20 (35.7%)
20) (35.7%
) 正規表現#match
10(17.9
%) 10
(17.9%
)日にち。現在 ... ...=>
10000
時間
もも取り戻せるstackprof
の測定値は、両方を切り替えるだけです。measure :time を使用して、時間に対して明示的にスケールを追加できることを理解してください。 それらは、それらを追加する宣言に出力されます:
irb
> 対策
:時間 TIME は
追加した.= > nil irb > 測定 :stackprof STACKPROF
は 追加した。処理中時間:0.000165
s) =>
nil irb > スニペット 処理中
時間: 0.058907s
==================================モード
:CPU(
1000) サンプル
:35(0.00 % 省略 価格
)GC: 5 (
14.29 %)==================================合計 (pct) サンプル (pct) フレーム 7 (20.0%) 7 (20.0%
) 正規表現#match
6
(17.1
%) 6
(17.1%
)日にち。現在 ... ...=> 10000
2回目の測定でどの測定を行っているかを調べるには、
測定:チェックリスト
を使用できます。
measure :checklist:
> 測定 :チェックリスト - 時間 - STACKPROF 処理中 時間: 0.000129s
irb
==================================モード
: CPU
(1000) サンプル
:
0
(
価格) GCNaN%
省略:0 (なーん % )==================================合計 (pct) サンプル
(pct)
フレーム => nil
カスタム メジャー手順
実際のところ、「ここはいいけど、占有メジャーの割り当てが必要だったらどうしよう」と考えているかもしれません。 ?」 また、「うわー、なんて楽しいブログを書いたんだ!」と考えているかもしれません
どちらの場合も、私たちは道徳的に始めています! このブログの