首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于提高性能的StringReplace替代方案

用于提高性能的StringReplace替代方案
EN

Stack Overflow用户
提问于 2008-09-26 14:22:22
回答 8查看 12.5K关注 0票数 10

我在生成的StringReplace中使用字符本身替换>和<,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
StringReplace(xml.Text,'&gt;','>',[rfReplaceAll]) ;
StringReplace(xml.Text,'&lt;','<',[rfReplaceAll]) ;

问题是要用很长的时间来替换所有出现的>。

你有没有更好的主意让它变得更快?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-26 15:11:48

试试彼得·莫里斯的FastStrings.pas吧。

票数 7
EN

Stack Overflow用户

发布于 2008-09-26 23:44:31

如果你使用的是Delphi2009,这个操作在TStringBuilder中比在ReplaceString中快3倍。它也是Unicode安全的。

我使用http://www.CodeGear.com中的文本,并将所有出现的"<“和">”更改为"&lt;""&gt;"作为起点。

包括字符串赋值和创建/释放对象,在我的系统上分别花费了大约25ms和75ms:

代码语言:javascript
代码运行次数:0
运行
复制
function TForm1.TestStringBuilder(const aString: string): string;
var
  sb: TStringBuilder;
begin
  StartTimer;
  sb := TStringBuilder.Create;
  sb.Append(aString);
  sb.Replace('&gt;', '>');
  sb.Replace('&lt;', '<');
  Result := sb.ToString();
  FreeAndNil(sb);
  StopTimer;
end;

function TForm1.TestStringReplace(const aString: string): string;
begin
  StartTimer;
  Result := StringReplace(aString,'&gt;','>',[rfReplaceAll]) ;
  Result := StringReplace(Result,'&lt;','<',[rfReplaceAll]) ;
  StopTimer;
end;
票数 8
EN

Stack Overflow用户

发布于 2008-09-28 10:01:44

您一定要看看快速代码项目页面:http://fastcode.sourceforge.net/

他们运行了一个更快的StringReplace (Ansi StringReplace挑战赛)的挑战赛,“赢家”比Delphi RTL快14倍。

在最近的版本中,Delphi本身已经包含了几个快速代码函数(我认为是在D2007上),因此性能的提高可能会根据您使用的Delphi版本的不同而显著不同。

如前所述,如果您真的想处理XML,那么您真的应该考虑基于Unicode的解决方案。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/139833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档