Ruby フォルダ内にあるものを取得できる「foreach」と「each_child」と「open」と「glob」のパフォーマンスを計測する
Rubyで、benchmarkを使用して、フォルダ内にあるものを取得できる「foreach」と「each_child」と「open」と「glob」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。
環境
- OS windows10 pro 64bit
- ruby 2.7.2p137
パフォーマンス計測
benchmarkを使用して、「foreach」と「each_child」と「open」と「glob」を使用して、フォルダ内にあるものを取得する(. と ..は除く)コードを10万回実行したパフォーマンスを計測するサンプルコードとなります。
require "benchmark"
# 繰り返し回数 10万回
i = 100_000
# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|
r.report "#foreach" do
i.times do
Dir.foreach(".") do |i|
next if i == "." or i == ".."
end
end
end
r.report "#each_child" do
i.times do
Dir.each_child(".").each do |i|
end
end
end
r.report "#open" do
i.times do
Dir.open(".").each do |i|
next if i == "." or i == ".."
end
end
end
r.report "#glob" do
i.times do
Dir.glob("*").each do |i|
end
end
end
end
実行結果
<1回目>
user system total real
#foreach 2.953000 14.157000 17.110000 ( 17.116834)
#each_child 3.375000 14.172000 17.547000 ( 17.570363)
#open 2.875000 14.250000 17.125000 ( 17.135085)
#glob 4.469000 16.171000 20.640000 ( 20.631108)
<2回目>
user system total real
#foreach 3.000000 14.438000 17.438000 ( 17.453493)
#each_child 2.891000 14.328000 17.219000 ( 17.236825)
#open 2.906000 14.312000 17.218000 ( 17.242243)
#glob 3.984000 16.766000 20.750000 ( 20.756050)
<3回目>
user system total real
#foreach 3.110000 14.437000 17.547000 ( 17.963086)
#each_child 2.906000 14.641000 17.547000 ( 17.557819)
#open 3.000000 14.297000 17.297000 ( 17.315619)
#glob 4.484000 16.343000 20.827000 ( 20.839256)
glob以外は、ほぼ同じ結果となりました。
-
前の記事
Pop!_OS aptコマンドを高速化する「apt-fast」をインストールする 2021.10.20
-
次の記事
C# 配列またはリストの平均値を取得する 2021.10.20
コメントを書く