代码1:var
a,b,c:single;
begin
a := 0.05 * pi;
b := 10 + a;
c := 10 - a;
end;代码2:
var
b,c:single;
begin
b := 10 + 0.05 * pi;
c := 10 - 0.05 * pi;
end;以上哪个代码好?速度快?1只用计算一次0.05*pi,但多了参数,分配空间,寻址也需要时间的吧,也不知道Delphi如何来优化代码,说不定他也自动给你弄个临时变量。
a,b,c:single;
begin
a := 0.05 * pi;
b := 10 + a;
c := 10 - a;
end;代码2:
var
b,c:single;
begin
b := 10 + 0.05 * pi;
c := 10 - 0.05 * pi;
end;以上哪个代码好?速度快?1只用计算一次0.05*pi,但多了参数,分配空间,寻址也需要时间的吧,也不知道Delphi如何来优化代码,说不定他也自动给你弄个临时变量。
●procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word); 描述:
DecodeDateTime 方法根据TDateTime类型参数AValue 得到相应的年份、月份、日子、小时、分、秒、毫秒。 判断毫秒级的速度
纳秒级都不够。to aiirii(ari-爱的眼睛)
duint 是什么,麻烦指点?
但测试没什么意义,只是想了解原因。
TTestCaseFirst = class(TTestCase)
private protected
// procedure SetUp; override;
// procedure TearDown; override;
published
// Test methods
procedure TestSingle1;
procedure TestSingle2;
end;implementation{ TResourceItemTests }procedure TTestCaseFirst.TestSingle1;
var
a,b,c:single;
begin
a := 0.05 * pi;
b := 10 + a;
c := 10 - a;
Check(b=20-c, 'TestSingle1 failure!');
end;procedure TTestCaseFirst.TestSingle2;
var
b,c:single;
begin
b := 10 + 0.05 * pi;
c := 10 - 0.05 * pi;
Check(b=20-c, 'TestSingle1 failure!');
end;initialization
TestFramework.RegisterTest(TTestCaseFirst.Suite);end.两个函数,用时:
0:00:00.025
0:00:00.024duint 的介绍在这里
两个函数,用时:
0:00:00.025
0:00:00.024
>>估计代码2效率高。我不懂汇编,能详细点吗?听说还有个指令周期的问题,有些指令很花时间的。
Form1: TForm1;
b1,c1:single;
implementation{$R *.dfm}
procedure proc1;
var
a,b,c:single;
begin
a := 0.05 * pi;
b := 10 + a;
c := 10 - a;
b1:=b;
c1:=c;
end;
procedure proc2;
var
b,c:single;
begin
b := 10 + 0.05 * pi;
c := 10 - 0.05 * pi;
b1:=b;
c1:=c;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
var c,i:DWORD;
begin
c := GetTickCount;
for i:=0 to 100000000 do
begin
proc1;
end;
ListBox1.Items.Add(IntToStr(GetTickCount-c));
end;procedure TForm1.BitBtn2Click(Sender: TObject);
var c,i:DWORD;
begin
c := GetTickCount;
for i:=0 to 100000000 do
begin
proc2;
end;
ListBox1.Items.Add(IntToStr(GetTickCount-c));
end;第一个大概1200 第二个大概800
关注...