从调试切换到发布配置对性能没有影响?

时间:2010-07-02 05:24:18

标签: performance delphi

我在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;

如果我在debugrelease配置下运行/编译,结果大约为900,这无关紧要。 当我在Visual Studio中从debug切换到release时(对于c ++和c#),我的程序变得非常快。我正在使用Delphi 2010,我从项目经理和项目激活发布配置 - >配置管理器甚至项目 - >选项 - > Delphi编译但是没有效果为什么??

如果重要:我使用的是Windows XP,我有1GB RAM和Intel Core2 CPU。

4 个答案:

答案 0 :(得分:16)

  1. 您是否检查了配置有何不同?即使它们具有RELEASE或DEBUG等名称,它们也是完全可配置的。你甚至可以反过来配置它们。

  2. 您正在计时的代码主要与I / O相关。因此,请确保在RELEASE配置中关闭IO检查。

  3. 即使在调试时,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检查

在这三个中,仅适用 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;

CMPJNE CPU指令并不复杂。通过写入硬盘驱动器,它们相形见绌

它的运行速度一样快,因为速度很快。