Timing Anonymous
Methods
计时功能匿名函数
开发者们经常需要添加计时代码到一个已有的常规过程中,比较他们的相关速度。前面例子已经使用了几次实例,指出Uncode字符执行速度。对比两个代码片段,比较他们的执行毫秒数,妳可以写出下面内容(在本书第二章的“转换字符”例子):
[delphi] view plaincopy
- procedure
TFormAnonTiming .btnClassicClick( -
Sender:
TObject); - var
- str1:
string; -
str2:
AnsiString; -
I:
Integer; -
t1:
TDateTime; - begin
-
str1
:= 'Marco Cantù' ; -
t1
:= Now; - for
I 1:= to MaxLoop2 do -
str1
:= AnsiUpperCase (str1); -
t1
:= now - t1; - Memo1.Lines.Add
( 'AnsiUpperCase(string): ' + - FormatDateTime('nn:ss.zzz',
t1)); -
str2
:= 'Marco Cantù' ; -
t1
:= Now; - for
I 1:= to MaxLoop2 do -
str2
:= AnsiUpperCase (str2); -
t1
:= now - t1; - Memo1.Lines.Add
( 'AnsiUpperCase(AnsiString): ' + - FormatDateTime('nn:ss.zzz',
t1)); - end;
为了避免多次重复计时代码,妳可以写一个调用计时函数,通过无参方式的匿名方法调用代码片段:
[delphi] view plaincopy
- function
TimeCode string;(nLoops: Integer; proc: TProc): - var
-
t1: TDateTime; -
I: Integer; - begin
-
t1 := Now; -
for I 1:= to nLoops do -
proc; -
t1 := now - t1; -
Result := FormatDateTime('nn:ss.zzz', t1); - end;
-
- procedure
TFormAnonTiming .btnAnonClick(Sender:TObject); - var
-
str1: string; -
str2: AnsiString; - begin
-
str1 := 'Marco Cantù' ; -
Memo1.Lines.Add ( 'AnsiUpperCase(string): ' + -
TimeCode (MaxLoop2, -
procedure () -
begin -
str1 := AnsiUpperCase (str1); -
end)); -
str2 := 'Marco Cantù' ; -
Memo1.Lines.Add ( 'AnsiUpperCase(AnsiString): ' + -
TimeCode (MaxLoop2, -
procedure () -
begin -
str2 := AnsiUpperCase (str2); -
end)); - end;
执行标准版本的和依赖匿名方法的将获得如下结果:
Classic
AnsiUpperCase (string): 00:00.588
AnsiUpperCase (AnsiString): 00:01.087
Anonymous
AnsiUpperCase (string): 00:00.644
AnsiUpperCase (AnsiString): 00:01.153