From def00961243da0662f394bdf58b1157cfd45dfab Mon Sep 17 00:00:00 2001 From: Julien Nabet Date: Sat, 5 Oct 2019 15:34:54 +0200 Subject: Optimize getNamespaceId (xmlreader) Adding a map to cache values allows me 20s -> 13s to start LO Change-Id: If343225def253e29696b96f223cdcb54d0d8525d Reviewed-on: https://gerrit.libreoffice.org/80290 Tested-by: Jenkins Reviewed-by: Julien Nabet --- xmlreader/source/xmlreader.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'xmlreader/source') diff --git a/xmlreader/source/xmlreader.cxx b/xmlreader/source/xmlreader.cxx index 1651f857e411..229be044662c 100644 --- a/xmlreader/source/xmlreader.cxx +++ b/xmlreader/source/xmlreader.cxx @@ -182,11 +182,21 @@ Span XmlReader::getAttributeValue(bool fullyNormalize) { } int XmlReader::getNamespaceId(Span const & prefix) const { + OUString spanString = prefix.convertFromUtf8(); + + if (auto it = cacheNSIds_.find(spanString); it != cacheNSIds_.end()) + { + return it->second; + } + auto i = std::find_if(namespaces_.crbegin(), namespaces_.crend(), [&prefix](const NamespaceData& rNamespaceData) { return prefix.equals(rNamespaceData.prefix); }); if (i != namespaces_.rend()) + { + cacheNSIds_[spanString]= i->nsId; return i->nsId; + } return NAMESPACE_UNKNOWN; } -- cgit