[ https://issues.apache.org/jira/browse/GROOVY-6360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17823389#comment-17823389 ]
ASF GitHub Bot commented on GROOVY-6360: ---------------------------------------- paulk-asert closed pull request #1496: GROOVY-6360: move @Pure to separate subproject. URL: https://github.com/apache/groovy/pull/1496 > GString performance is slow with String's method > ------------------------------------------------ > > Key: GROOVY-6360 > URL: https://issues.apache.org/jira/browse/GROOVY-6360 > Project: Groovy > Issue Type: Improvement > Components: groovy-jdk > Affects Versions: 2.1.7 > Reporter: Linh Pham > Assignee: Paul King > Priority: Minor > Fix For: 3.0.8, 4.0.0-alpha-3 > > Time Spent: 3h 20m > Remaining Estimate: 0h > > GString implementation of String's method is very expensive. With trim(), it > can be 10 times slower than String's counterpart. > *Steps to reproduce:* > A small test program showed GString.trim() is 10 times slower than > String.trim(). > {code} > def a = " content " > def b = " ${'content'} " > println "a class: ${a.class}" //output: class java.lang.String > println "b class: ${b.class}" //output: class > org.codehaus.groovy.runtime.GStringImpl > long start = System.currentTimeMillis() > 10000000.times { > a.trim() > } > println "String trim completed in ${System.currentTimeMillis() - start} ms." > //output *909* ms > start = System.currentTimeMillis() > 10000000.times { > b.trim() > } > println "GString trim completed in ${System.currentTimeMillis() - start} ms." > //output: *9321 *ms > {code} > We can get around the problem by calling toString() on GString before > invoking methods, BUT it should be supported inside the Groovy runtime. > More info at this thread: http://markmail.org/thread/4cti6dgb7pmrzqbl -- This message was sent by Atlassian Jira (v8.20.10#820010)