代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
procedure TForm1.Button1Click(Sender: TObject);
var
B:TButton;
I: Integer;
ATime:Cardinal;
begin
ATime:=GetTickCount;
for I := 0 to 99999999 do
B:=Sender as TButton;
ATime:=GetTickCount-ATime;
Memo1.Lines.Add('as time:'+IntToStr(ATime)+'ms');
ATime:=GetTickCount;
for I := 0 to 99999999 do
B:=TButton(Sender);
ATime:=GetTickCount-ATime;
Memo1.Lines.Add('direct time:'+IntToStr(ATime)+'ms');
end;
|
好吧,我们已经知道 ASender 肯定是一个 TButton 类型的对象,然后循环了 1 亿次,以便放大问题。我们看下输出结果:
as time:578ms
direct time:219ms
也就是说,用 as 转换花费的时间,要比直接强制转换多花了 2.7 倍的时间。根据统计结点来说,1 亿次需要 578 ms,每百万次也差距在 3.6 ms 左右,实际差距并没有比例看起来的那么吓人。不过在程序中,如果你明确知道类型的情况下,用强制转换好象没什么坏片,还少输入两个空格的工作量,看起来蛮划算的,不过由于()的位置,实际输入可能会更慢一些。好吧,处女座的人纠结去吧,我个人还是觉得强转更好一点点,蚊子再小也是肉。