Portál AbcLinuxu, 5. listopadu 2025 15:45
% ruby benchmark.rb
Rehearsal ---------------------------------------------------------
using local variable: 62.000000 0.030000 62.030000 ( 62.237641)
using constant: 0.000000 0.000000 0.000000 ( 0.000484)
----------------------------------------------- total: 62.030000sec
user system total real
using local variable: 61.900000 0.000000 61.900000 ( 62.282676)
using constant: 0.000000 0.000000 0.000000 ( 0.000466)
Jak to zlepšit - dát to pole někde mimo tu metodu?
class CzechNamesVocative
NAMES = { "Marie" => "Marie",
"Jana" => "Jano",
... }
def self.do(name)
NAMES[name]
end
end
Takhle se ti to načte do paměti při startu aplikace, namísto toho, abys při každém volání té metody vytvořil 70k řetězců a pak je nechal GC zase uvolnit.
Super, to zní skvěle, předělám to.
Jak jen spouštíš ten benchmark?
Benchmark.bmbm do |x|
n = 1000
x.report('using local variable:') { n.times { CzechNamesVocativeLocal.do('Petr') } }
x.report('using constant: ') { n.times { CzechNamesVocativeConstant.do('Petr') } }
end
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.