代码如下:
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 左右,实际差距并没有比例看起来的那么吓人。不过在程序中,如果你明确知道类型的情况下,用强制转换好象没什么坏片,还少输入两个空格的工作量,看起来蛮划算的,不过由于()的位置,实际输入可能会更慢一些。好吧,处女座的人纠结去吧,我个人还是觉得强转更好一点点,蚊子再小也是肉。