【发布时间】:2012-06-30 21:44:17
【问题描述】:
我正在将一些应用程序从 32 位移植到 64 位 delphi,这些应用程序执行大量文本处理,并注意到处理速度发生了极大的变化。使用一些程序进行了一些测试,例如,在 64 位中这已经比编译到 32 位花费了 200% 以上的时间(2000+ ms 与 ~900 相比)
这正常吗?
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;
【问题讨论】:
-
如果你使用
StrToInt(x),你会看到同样的问题吗? -
您是否进行了其他一些不涉及低级指针操作的测试?
-
是的,只在循环中执行 StrToInt:2246ms 与 1498ms (64/32)。除此之外,我移植的一个大型应用程序有一个测试处理速度的基准(它将一些文本通过一个包含数百个字符串操作子例程的非常长的过程),64 位应用程序的处理时间几乎是两倍。
-
我想说做一些测试,专门将您的变量转换为 in64 或 longint。
-
Int64/NativeInt 仍然没有区别。
标签: delphi 64-bit delphi-xe2