我在Delphi上测试了几个基准测试片段,如下所示:
uses
..., Diagnostics;
procedure TForm2.Button1Click(Sender: TObject);
var
i,elapsed: integer;
stopwatch: TStopwatch;
ff: textfile;
begin
if FileExists('c:\bench.txt') then
DeleteFile('c:\bench.txt');
stopwatch := TStopwatch.create;
stopwatch.Reset;
stopwatch.Start;
AssignFile(ff,'c:\bench.txt');
Rewrite(ff);
for I := 1 to 999000 do
write(ff,'Delphi programmers are ladies men :D');
CloseFile(ff);
stopwatch.Stop;
elapsed := stopwatch.ElapsedMilliseconds;
ShowMessage(inttostr(elapsed));
end;
如果我在debug
或release
配置下运行/编译,结果大约为900,这无关紧要。
当我在Visual Studio中从debug
切换到release
时(对于c ++和c#),我的程序变得非常快。我正在使用Delphi 2010,我从项目经理和项目激活发布配置 - >配置管理器甚至项目 - >选项 - > Delphi编译但是没有效果为什么??
如果重要:我使用的是Windows XP,我有1GB RAM和Intel Core2 CPU。
答案 0 :(得分:16)
您是否检查了配置有何不同?即使它们具有RELEASE或DEBUG等名称,它们也是完全可配置的。你甚至可以反过来配置它们。
您正在计时的代码主要与I / O相关。因此,请确保在RELEASE配置中关闭IO检查。
即使在调试时,Delphi仍会创建快速代码;)
答案 1 :(得分:10)
除了Uwe所说的,请确保在切换配置后执行“构建”。执行简单的编译或运行应用程序不会使用新设置重新编译所有单元。
与其他评论者一样,鉴于所使用的基准测试,我也不会期望两种配置之间存在太大差异。真正的瓶颈是I / O,这很可能会破坏DEBUG和RELEASE之间的任何性能差异。
最后,在Delphi中进行调试并不比Release版本慢得多。哎呀,我有时在调试器中运行Outlook大部分时间(我正在开发Outlook插件)而没有注意到任何可察觉的性能差异。
答案 2 :(得分:5)
我认为这是一个糟糕的测试案例。您所做的就是写入文件,这意味着大部分时间都花在Windows代码上,而不是Delphi代码中,因此编译器设置不会显着影响总执行时间
答案 3 :(得分:3)
主要代码中没有任何内容:
for I := 1 to 999000 do
write(ff,'Delphi programmers are ladies men :D');
需要进行剧烈检查。您的选择是:
在这三个中,仅适用 I / O检查,这可能相当于添加:
for I := 1 to 999000 do
begin
hresult := Write(ff, 'Dephi programmers are ladies men :D');
if hresult < 0 then
raise EIOException.Create('That''s what your mom told me, in bed.');
end;
CMP
和JNE
CPU指令并不复杂。通过写入硬盘驱动器,它们相形见绌。
它的运行速度一样快,因为速度很快。