Bypass calling String.formatted for most common case: "%s" (seen to be a hotspot in huge exports)

This commit is contained in:
2023-10-16 08:56:01 -05:00
parent 017addc188
commit caba27448d
2 changed files with 13 additions and 0 deletions

View File

@ -119,6 +119,15 @@ public class QValueFormatter
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
if(StringUtils.hasContent(displayFormat)) if(StringUtils.hasContent(displayFormat))
{ {
//////////////////////////////////////////////////////////////////////////////////////////
// if the format is %s (the default), just return value a string //
// this saves some overhead incurred by String.formatted when called millions of times. //
//////////////////////////////////////////////////////////////////////////////////////////
if(displayFormat.equals("%s"))
{
return (ValueUtils.getValueAsString(value));
}
try try
{ {
return (displayFormat.formatted(value)); return (displayFormat.formatted(value));

View File

@ -57,6 +57,10 @@ class QValueFormatterTest extends BaseTest
{ {
assertNull(QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(DisplayFormat.COMMAS), null)); assertNull(QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(DisplayFormat.COMMAS), null));
assertEquals("1", QValueFormatter.formatValue(new QFieldMetaData(), 1));
assertEquals("1", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat("%s"), 1));
assertEquals("Hello", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat("%s"), "Hello"));
assertEquals("1", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(DisplayFormat.COMMAS), 1)); assertEquals("1", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(DisplayFormat.COMMAS), 1));
assertEquals("1,000", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(DisplayFormat.COMMAS), 1000)); assertEquals("1,000", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(DisplayFormat.COMMAS), 1000));
assertEquals("1000", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(null), 1000)); assertEquals("1000", QValueFormatter.formatValue(new QFieldMetaData().withDisplayFormat(null), 1000));