我正在使用StringReplace将生成的XML中的>和<替换为char本身,如下所示:
StringReplace(xml.Text,'>','>',[rfReplaceAll]) ; StringReplace(xml.Text,'<','<',[rfReplaceAll]) ;
事情是,取代>的每一次出现都需要太长时间.
你是否有更好的想法让它更快?
如果您使用的是Delphi 2009,使用TStringBuilder时此操作比使用ReplaceString快3倍.它也是Unicode安全的.
我用从文本http://www.CodeGear.com与"<"和">"改变所有出现"<"
,并">"
作为我的出发点.
包括字符串赋值和创建/释放对象,这些在我的系统上分别花了大约25ms和75ms:
function TForm1.TestStringBuilder(const aString: string): string; var sb: TStringBuilder; begin StartTimer; sb := TStringBuilder.Create; sb.Append(aString); sb.Replace('>', '>'); sb.Replace('<', '<'); Result := sb.ToString(); FreeAndNil(sb); StopTimer; end; function TForm1.TestStringReplace(const aString: string): string; begin StartTimer; Result := StringReplace(aString,'>','>',[rfReplaceAll]) ; Result := StringReplace(Result,'<','<',[rfReplaceAll]) ; StopTimer; end;
试试Peter Morris的FastStrings.pas.
你一定要看看Fastcode项目页面:http://fastcode.sourceforge.net/
他们对更快的StringReplace(Ansi StringReplace挑战)提出了挑战,并且'胜利者'比Delphi RTL快14倍.
Delphi本身的几个快速编码功能已包含在最新版本中(我认为是D2007),因此根据您使用的Delphi版本,性能改进可能会有很大差异.
如前所述,如果您真的想要处理XML,那么您应该真正关注基于Unicode的解决方案.