[
https://issues.apache.org/jira/browse/GROOVY-9637?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Sun resolved GROOVY-9637.
--------------------------------
Assignee: Paul King
Resolution: Fixed
The proposed PR is merged. Thanks!
> Improve the performance of GString
> ----------------------------------
>
> Key: GROOVY-9637
> URL: https://issues.apache.org/jira/browse/GROOVY-9637
> Project: Groovy
> Issue Type: Improvement
> Reporter: Daniel Sun
> Assignee: Paul King
> Priority: Major
> Labels: breaking
> Fix For: 4.0.0-alpha-1
>
> Time Spent: 8h 50m
> Remaining Estimate: 0h
>
> {{GString}} will runĀ {{toString()}} whenever its literal string is needed,
> e.g. methods like {{equals}}, {{hashCode}} are called, but unfortunately its
> literal string will be re-constructed for each time and the process costs
> quite a little of time.
> So I propose to check whether {{GString}} values are all of immutable type,
> e.g. primitive types and their boxed type, {{String}}, etc. If yes, use the
> cached string literal, otherwise re-construct the literal string.
> Here is the test script, Groovy 3.0.4 costs about {{283ms}}, and PR1309 costs
> about {{173ms}} on my machine. About {{39%}} time is reduced.
> {code:groovy}
> long b = System.currentTimeMillis()
> def gstr = "a${1}b${1.2}c${'x'}d${Map.class}e${true}"
> for (int i = 0; i < 100000; i++) {
> gstr.toString()
> }
> long e = System.currentTimeMillis()
> println "${e - b}ms"
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)