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

Oma*_*bal 8 delphi performance

我在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;
Run Code Online (Sandbox Code Playgroud)

如果我运行/编译debugrelease配置结果是900左右并不重要.当我从Visual Studio 切换debugrelease(对于c ++和c#)时,我的程序变得非常快.我正在使用Delphi 2010,我从项目管理器以及项目 - >配置管理器甚至项目 - >选项 - > Delphi编译器激活发布配置但是没有效果为什么?

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

Uwe*_*abe 16

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

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

  3. 即使在调试时,Delphi仍会创建快速代码;)

  • +1"检查配置文件".+1"主要与I/O相关".+1"for delphi创建快速代码"... @omair:如果你想看到调试和发布之间的速度差异,那就在一些CPU密集型的doe上做.您的代码是HDD的基准,您应该使用任何编程语言,从perl到python,从汇编程序到Windows批处理文件. (2认同)

Oli*_*sen 10

除了Uwe所说的,请确保在切换配置后执行"构建".执行简单的编译或运行应用程序不会使用新设置重新编译所有单元.

与其他评论者一样,考虑到所使用的基准测试,我也不会期望两种配置之间存在太大差异.真正的瓶颈是I/O,很可能会使DEBUG和RELEASE之间的任何性能差异失衡.

最后,在Delphi中进行调试并不比Release版本慢得多.哎呀,我有时在调试器中运行Outlook大部分时间(我正在开发Outlook插件)而没有注意到任何可察觉的性能差异.


Gie*_*iel 5

我认为这是一个糟糕的测试用例.您所做的就是写入文件,这意味着大部分时间都花在Windows代码上,而不是Delphi代码中,因此编译器设置不会显着影响总执行时间