我在生成的StringReplace中使用字符本身替换>和<,如下所示:
StringReplace(xml.Text,'>','>',[rfReplaceAll]) ;
StringReplace(xml.Text,'<','<',[rfReplaceAll]) ;
问题是要用很长的时间来替换所有出现的>。
你有没有更好的主意让它变得更快?
发布于 2008-09-26 07:11:48
试试彼得·莫里斯的FastStrings.pas吧。
发布于 2008-09-26 15:44:31
如果你使用的是Delphi2009,这个操作在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;
发布于 2008-09-28 02:01:44
您一定要看看快速代码项目页面:http://fastcode.sourceforge.net/
他们运行了一个更快的StringReplace (Ansi StringReplace挑战赛)的挑战赛,“赢家”比Delphi RTL快14倍。
在最近的版本中,Delphi本身已经包含了几个快速代码函数(我认为是在D2007上),因此性能的提高可能会根据您使用的Delphi版本的不同而显著不同。
如前所述,如果您真的想处理XML,那么您真的应该考虑基于Unicode的解决方案。
https://stackoverflow.com/questions/139833
复制