代码可以这样编写,具有良好的性能结果:
function IsStrANumber(const S: AnsiString): Boolean; inline;
var
P: PAnsiChar;
begin
Result := False;
P := PAnsiChar(S);
while True do
begin
case PByte(P)^ of
0: Break;
$30..$39: Inc(P);
else
Exit;
end;
end;
Result := True;
end;
Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz
- x32 位:2730 毫秒
- x64 位:3260 毫秒
Intel(R) Pentium(R) D CPU 3.40GHz
- x32 位:2979 毫秒
- x64 位:1794 毫秒
展开上述循环可以加快执行速度:
function IsStrANumber(const S: AnsiString): Boolean; inline;
type
TStrData = packed record
A: Byte;
B: Byte;
C: Byte;
D: Byte;
E: Byte;
F: Byte;
G: Byte;
H: Byte;
end;
PStrData = ^TStrData;
var
P: PStrData;
begin
Result := False;
P := PStrData(PAnsiChar(S));
while True do
begin
case P^.A of
0: Break;
$30..$39:
case P^.B of
0: Break;
$30..$39:
case P^.C of
0: Break;
$30..$39:
case P^.D of
0: Break;
$30..$39:
case P^.E of
0: Break;
$30..$39:
case P^.F of
0: Break;
$30..$39:
case P^.G of
0: Break;
$30..$39:
case P^.H of
0: Break;
$30..$39: Inc(P);
else
Exit;
end;
else
Exit;
end;
else
Exit;
end;
else
Exit;
end;
else
Exit;
end;
else
Exit;
end;
else
Exit;
end;
else
Exit;
end;
end;
Result := True;
end;
Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz
- x32 位:2199 毫秒
- x64 位:1934 毫秒
Intel(R) Pentium(R) D CPU 3.40GHz
- x32 位:1170 毫秒
- x64 位:1279 毫秒
如果你也应用 Arnaud Bouchez 所说的,你可以让它更快。