From fe7df0603753276ef0c179072caec4b45b70927d Mon Sep 17 00:00:00 2001 From: juha Date: Thu, 30 May 2013 09:52:37 +0000 Subject: [PATCH] LazUtils: Optimize TXMLConfig.InternalFindNode, call virtual NodeName getter only once. git-svn-id: trunk@41456 - --- components/lazutils/laz2_xmlcfg.pas | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/components/lazutils/laz2_xmlcfg.pas b/components/lazutils/laz2_xmlcfg.pas index 99283ce215..cf9113c6a7 100644 --- a/components/lazutils/laz2_xmlcfg.pas +++ b/components/lazutils/laz2_xmlcfg.pas @@ -492,6 +492,7 @@ var StartPos, EndPos: integer; PathIndex: Integer; Parent: TDOMNode; + NdName: DOMString; NameLen: Integer; begin //debugln(['TXMLConfig.InternalFindNode APath="',copy(APath,1,PathLen),'" CreateNodes=',CreateNodes]); @@ -510,11 +511,14 @@ begin if NameLen=0 then break; inc(PathIndex); Parent:=Result; - Result:=GetPathNodeCache(PathIndex); - if (Result<>nil) and (length(Result.NodeName)=NameLen) - and CompareMem(PChar(Result.NodeName),@APath[StartPos],NameLen) then begin - // cache valid - end else begin + if PathIndexnil then + NdName:=Result.NodeName; + if (Result=nil) or (length(NdName)<>NameLen) + or not CompareMem(PChar(NdName),@APath[StartPos],NameLen) then begin // different path => search InvalidateCacheTilEnd(PathIndex); NodePath:=copy(APath,StartPos,NameLen); @@ -522,7 +526,7 @@ begin if Result=nil then begin if not CreateNodes then exit; // create missing node - Result := Doc.CreateElement(NodePath); + Result:=Doc.CreateElement(NodePath); Parent.AppendChild(Result); if EndPos>PathLen then exit; end;