//以下测试代码
var
s, ss: string;
begin
//JSON中包含大量双引号,方便测试出效果
with TStreamReader.Create('全国adcode.json', TEncoding.UTF8) do
try
s := ReadToEnd;
finally
Free;
end;
//1.添加定界符(内容中含定界符的要转义)
ss := QuotedStr(s);//单引号
ss := s.QuotedString('''');//单引号
//2.添加指定的定界符(内容中含定界符的要转义)
ss := AnsiQuotedStr(s, '"');//双引号
ss := s.QuotedString('"');//双引号
//3.去掉定界符(内容中含连续两个定界符的要反转义)
ss := AnsiDequotedStr(s, '"');//双引号
ss := s.DeQuotedString('"');//双引号
end;
//经测试发现在个别情况下StringHelper方法非常慢
//1.s中含有大量双引号时,添加双引号定界符
//ss := s.QuotedString('"');//非常慢,比ss := AnsiQuotedStr(s, '"')慢几十倍
//2.s中含有大量双引号转义时,去除双引号定界符
//ss := s.DeQuotedString('"');//非常慢,比ss := AnsiDequotedStr(s, '"')慢几十倍
//3.单引号的添加与去除也是一样的
//所以,使用StringHelper的QuotedString和DeQuotedString方法时,要注意
//通过查看源码,发现AnsiQuotedStr和AnsiDequotedStr使用的指针操作
//而StringHelper的QuotedString和DeQuotedString使用逐个字符拷贝
Delphi中谨慎使用QuotedStr、QuotedString、DequotedString相关的函数
最新推荐文章于 2024-01-30 13:53:38 发布
这篇博客探讨了在处理含有大量双引号的JSON字符串时,使用Delphi中的StringHelper方法QuotedString和AnsiQuotedStr的性能差异。测试结果显示,在添加和移除定界符时,AnsiQuotedStr和AnsiDequotedStr的性能显著优于StringHelper的对应方法,尤其是在字符串中存在大量需要转义的双引号时。博主建议在处理大量字符串操作时注意选择合适的方法,以提高代码效率。
1799

被折叠的 条评论
为什么被折叠?



