diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-10-30 15:02:45 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-10-30 15:02:45 +0100 |
commit | 16741e922398bff564903e641be33003ad9ec81a (patch) | |
tree | db1160b9bd6459c3c7edc3a357c4f62f60859329 /config-model | |
parent | f6825e1049f5b2ffd985bec135bd1520d24118ac (diff) |
Replace extremely expensive String.split with simple indexOf/substring.
This cuts cost of getConfig for large rankprofiles by a factor of 20.
Observed a reduction from 1100ms to 60ms.
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java index 18d30b57227..6192db2654e 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java @@ -76,9 +76,14 @@ public class RawRankProfile implements RankProfilesConfig.Producer { if (propertiesString.isEmpty()) return ImmutableList.of(); ImmutableList.Builder<Pair<String, String>> properties = new ImmutableList.Builder<>(); - for (String propertyString : propertiesString.split(valueEndMarker)) { - String[] property = propertyString.split(keyEndMarker); - properties.add(new Pair<>(property[0], property[1])); + for (int pos = 0; pos < propertiesString.length();) { + int keyEndPos = propertiesString.indexOf(keyEndMarker, pos); + String key = propertiesString.substring(pos, keyEndPos); + pos = keyEndPos + keyEndMarker.length(); + int valueEndPos = propertiesString.indexOf(valueEndMarker, pos); + String value = propertiesString.substring(pos, valueEndPos); + pos = valueEndPos + valueEndMarker.length(); + properties.add(new Pair<>(key, value)); } return properties.build(); } |