Ausführungszeit für diesen Code ist etwa 1 Sekunde:Eine Schleife mit vielen Iterationen macht Ausführung unglaublich langsam
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)
Aber wenn ich eine Schleife mit 10000000 Iterationen verwenden (anstelle von 2-Schleifen, 1000 und 10000 Iterationen geschrieben oben), es wurde viel langsamer (etwa 4,5 Sekunden):
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)
Warum passiert es? Die Gesamtzahl der Iterationen ist immer noch gleich.
Versuchen jeweils Werte von 'result' zu untersuchen. Ich denke '10_000_000 * 9_999_999' ist größer als' 10_000 * 9_999'. –
Ich habe 1.35sec für die erste und 1.24sec für den zweiten Code. Die Variable'Ergebnis' wächst nicht übermäßig, weil sie jedesmal neu gesetzt wird. –
Also, Iteration des ersten Codes ist im Grunde 1,35 Sekunden und 1,24 Sekunden für die Sekunde? Ungerade. Versuchen Sie, die Ausführung bei kleineren Blöcken zu protokollieren, z. B. alle 20%. Die Gesamtbelastung sollte sich mit einer einfachen Überprüfung gleichmäßig erhöhen, so dass der Test nicht sichtbar beeinflusst wird. –