Überlegungen zur Leistung von Groovy-Sammlungen in Bezug auf Raum / Zeit
Was ist die Leistung von Groovys Erfassungsmethoden (in Bezug auf Platz (!) Und Zeit) im Vergleich zu einfachen Java-for-Loops?
ZB für diese Anwendungsfälle:
sum () vs. for-Schleife mit Variableeach () vs. for-Schleife mit Variableinject () vs. for-Schleife mit Variablecollect () vs. for-Schleife mit temporärer SammlungfindAll () vs. for-Schleife mit temporärer Sammlungfind () vs. for-Schleife mit VariableIst es angesichts dieser Ergebnisse ratsam, for-Schleifen über Groovy-Erfassungsmethoden in kritischen Umgebungen (z. B. Grails-WebApp) zu verwenden? Gibt es Ressourcen zur Leistung von Groovy / Grails (Optimierung)?
Mit diesem GBench-Test habe ich folgende Ergebnisse für die CPU-Zeit erhalten:
user system cpu real
forLoop 2578777 67 2578844 2629592
forEachLoop 2027941 47 2027988 2054320
groovySum 3946137 91 3946228 3958705
groovyEach 4703000 0 4703000 4703000
groovyInject 4280792 108 4280900 4352287
import groovyx.gbench.BenchmarkBuilder
def testSize = 100,00
def testSet = (0..testSize) as Set
def bm = new BenchmarkBuilder().run {
'forLoop' {
def n = 0
for(int i = 0; i<testSize; i++) {
n += i
}
return n
}
'forEachLoop' {
def n = 0
for(int i in testSet) {
n += i
}
return n
}
'groovySum' {
def n = testSet.sum()
return n
}
'groovyEach' {
def n = 0
testSet.each { n + it }
return n
}
'groovyInject' {
def n = testSet.inject(0) { el, sum -> sum + el }
return n
}
}
bm.prettyPrint()