Ich bemerkte, dass array.min
langsam scheint, so habe ich diesen Test gegen meine eigene naive Umsetzung:Warum ist array.min so langsam?
require 'benchmark'
array = (1..100000).to_a.shuffle
Benchmark.bmbm(5) do |x|
x.report("lib:") { 99.times { min = array.min } }
x.report("own:") { 99.times { min = array[0]; array.each { |n| min = n if n < min } } }
end
Die Ergebnisse:
Rehearsal -----------------------------------------
lib: 1.531000 0.000000 1.531000 ( 1.538159)
own: 1.094000 0.016000 1.110000 ( 1.102130)
-------------------------------- total: 2.641000sec
user system total real
lib: 1.500000 0.000000 1.500000 ( 1.515249)
own: 1.125000 0.000000 1.125000 ( 1.145894)
Ich bin schockiert. Wie kann meine eigene Implementierung einen Block über each
schlagen die eingebaute? Und schlage es so sehr?
Bin ich irgendwie falsch? Oder ist das irgendwie normal? Ich bin verwirrt.
Meine Ruby-Version, die unter Windows 8.1 Pro:
C:\>ruby --version
ruby 2.2.3p173 (2015-08-18 revision 51636) [i386-mingw32]
Meine Ergebnisse sind ziemlich unterschiedlich https://gist.github.com/weppos/3411eafc2c52e69ec751 –
So sind sie etwa gleich schnell für Sie. Überrascht mich immer noch. Welche Version hast du? Ich habe 2.2.2p95, werde jetzt auf 2.3 updaten und nochmal testen. –
Gemeint sind 2.2.3 natürlich. Habe ich jetzt, aber ich beobachte immer noch das Gleiche. –