Portál AbcLinuxu, 30. dubna 2025 14:55
% 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 endTakhle 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.