当前位置: 首页 > 知识库问答 >
问题:

Delphi XE2 64位字符串例程运行时性能极低

晁砚
2023-03-14

这正常吗?

function IsStrANumber(const S: AnsiString): Boolean;
var P: PAnsiChar;
begin
  Result := False;
  P := PAnsiChar(S);
  while P^ <> #0 do begin
    if not (P^ in ['0'..'9']) then Exit;
    Inc(P);
  end;
  Result := True;
end;

procedure TForm11.Button1Click(Sender: TObject);
Const x = '1234567890';
Var a,y,z: Integer;
begin
  z := GetTickCount;
  for a := 1 to 99999999 do begin
   if IsStrANumber(x) then y := 0;//StrToInt(x);
  end;
  Caption := IntToStr(GetTickCount-z);
end;

共有1个答案

訾渝
2023-03-14

[“0”..“9”]中的测试p^在64位中较慢。

添加了一个内联函数,它带有一个下边界/上边界的测试,而不是in[]测试,还有一个空字符串的测试。

function IsStrANumber(const S: AnsiString): Boolean; inline;
var
  P: PAnsiChar;
begin
  Result := False;
  P := Pointer(S);
  if (P = nil) then
    Exit;
  while P^ <> #0 do begin
    if (P^ < '0') then Exit;
    if (P^ > '9') then Exit;
    Inc(P);
  end;
  Result := True;
end;

基准结果:

        x32     x64
--------------------
hikari  1420    3963
LU RD   1029    1060

 类似资料:
  • 问题内容: 在Java和C#之类的语言中,字符串是不可变的,并且一次建立一个字符的字符串在计算上是昂贵的。在上述语言中,有一些库类可以降低这种成本,例如C#和Java 。 php(4或5;我对两者都感兴趣)是否都共享此限制?如果是这样,是否有类似的解决方案? 问题答案: 不,在PHP中没有stringbuilder类的类型,因为字符串是可变的。 话虽如此,根据您在做什么,有不同的方式来构建字符串。

  • 问题内容: 网上有很多关于python性能的文章,这是您首先读到的:不应使用’+’连接字符串:避免使用s1 + s2 + s3,而应使用str.join 我尝试了以下操作:将两个字符串连接为目录路径的一部分:三种方法: 我不应该做的“ +” 连接 os.path.join 这是我的代码: 这里的结果(python 2.5 WinXP) 难道不是正好相反吗? 问题答案: 的确,您不应使用“ +”。您

  • 问题内容: 这是我的应用程序中的当前代码: 在对应用程序进行性能分析时,我注意到用于拆分字符串的时间不可忽略。 我还了解到,实际上需要一个正则表达式,这对我来说毫无用处。 所以我的问题是, 我可以使用哪种替代方法来优化字符串拆分? 我见过,但是速度更快吗? (我会尝试并测试自己,但是对我的应用程序进行性能分析需要花费很多时间,因此,如果有人已经知道答案,那么可以节省一些时间) 问题答案: 如果您的

  • 我正在学习如何通过OCA考试,并坚持这个java字符串池的概念。 考虑以下几点: 和在字符串中是相同的,在对象中也是相同的,因为它是相同的字符串文本,所以JVM在编译时将字符串池和。 现在,是在运行时计算的,因此应该返回一个新字符串。因此,应该为false,但事实并非如此。为什么? 我的一个理论是方法首先检查是否有空白需要删除,如果没有,则简单返回本身。这可以解释为什么s1==s3,但我不确定。

  • 本文向大家介绍通过+(字符串串联)运算符进行字符串串联。,包括了通过+(字符串串联)运算符进行字符串串联。的使用技巧和注意事项,需要的朋友参考一下 您可以使用Java的“ +”运算符来连接字符串。 示例 输出结果

  • 问题内容: 以下是什么大O ? python如何确定是否在字符串“ apple”中找到字符串“ pl”的整体大O是多少? 或字符串搜索中的任何其他子字符串。 这是测试子字符串是否在字符串中的最有效方法吗?它使用与相同的算法吗? 问题答案: 在python 3.4.2中,看起来他们在诉诸相同的功能,但时序可能仍然有所不同。例如,首先需要查找字符串等的方法。 所使用的算法是Boyer-More和Hor