EN Groovy, je viens de découvrir un projet qui s'appelle GBench qui permet de mesurer des temps d’exécutions.
On peut mesurer les temps d’exécutions de toutes les méthodes d'une classe :
@Grab(group='com.googlecode.gbench', module='gbench', version='11.07.05')
import gbench.*
@Benchmark()
class Klass {
def foo() {
Thread.sleep(10)
}
def bar() {
Thread.sleep(5)
}
}
def k = new Klass()
println "call foo"
k.foo()
println "call bar"
k.bar()
Klass void(): 14999053 ns
call foo
Klass java.lang.Object foo(): 14887245 ns
call bar
Klass java.lang.Object bar(): 5129355 ns
Seulement d'une méthode (et regarder comment spécifier le format d'affichage) :
@Grab(group='com.googlecode.gbench', module='gbench', version='11.07.05')
import gbench.*
class Klass {
@Benchmark({println("${method} of ${klass}: ${(time/1000000) as long} ms")})
def foo() {
Thread.sleep(10)
}
def bar() {
Thread.sleep(5)
}
}
def k = new Klass()
println "call foo"
k.foo()
println "call bar"
k.bar()
call foo
java.lang.Object foo() of Klass: 14 ms
call bar
Ou faire des comparaisons sur 1000 exécutions.
Dans cet exemple je compare le Parseur JSON de Groovy 1.8 avec celui de Jackson :
@Grab(group='com.googlecode.gbench', module='gbench', version='11.07.05')
@Grab(group='org.codehaus.jackson', module='jackson-mapper-asl', version='1.8.3')
import gbench.*
import groovy.json.JsonSlurper
import org.codehaus.jackson.map.ObjectMapper;
def slurper = new JsonSlurper()
def mapper = new ObjectMapper();
def jsonString = '{"name": "Romain", "age": 25}'
class Personn{ String name; int age }
def bench = new BenchmarkBuilder()
bench.run(times: 1000){
with 'Groovy JSON', {
Personn p = slurper.parseText(jsonString)
assert p.name == "Romain"
assert p.age == 25
}
with 'Jackson', {
Personn p = mapper.readValue(jsonString, Personn.class)
assert p.name == "Romain"
assert p.age == 25
}
}
println bench
time
Groovy JSON 179218175
Jackson 66699800
Nice examples. Thank you.
RépondreSupprimer