summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-10-30 15:02:45 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2019-10-30 15:02:45 +0100
commit16741e922398bff564903e641be33003ad9ec81a (patch)
treedb1160b9bd6459c3c7edc3a357c4f62f60859329 /config-model
parentf6825e1049f5b2ffd985bec135bd1520d24118ac (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.java11
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();
}