実行時間は約1秒で行います多くの反復とループは、このコードの実行非常に遅い
start_time = Time.now
prev = 1
(1..1000).each do |i|
(1..10000).each do |j|
result = j * prev
result = result + prev
result = result - prev
result = result/prev
prev = j
end
end
end_time = Time.now
printf('%f sec', end_time - start_time)
しかし、書かれたように私は(代わりに2つのループ、1000万回の反復の10000000回の反復で1つのループを使用する場合(約4.5秒):
start_time = Time.now
prev = 1
(1..10000000).each do |j|
result = j * prev
result = result + prev
result = result - prev
result = result/prev
prev = j
end
end_time = Time.now
printf('%f sec', end_time - start_time)
どうしてですか?トータルの反復回数は同じです。
は、それぞれの場合における 'result'の値を調査してみます。私は '10_000_000 * 9_999_999'が' 10_000 * 9_999'よりも大きいと思います。 –
最初のコードは1.35秒、2番目のコードは1.24秒です。変数 'result'は毎回リセットされるので、過度に大きくならない。 –
基本的に、最初のコードの反復は、1.35秒と1.24秒ですか?奇妙な ロギングの実行を小さなチャンクで試してください。たとえば、合計の20%ごとに実行してください。全体的な負荷は簡単なチェックで均等に増加するはずですので、テストに目に見えるほどの影響はありません。 –