代码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如何来优化代码,说不定他也自动给你弄个临时变量。

解决方案 »

  1.   


    ●procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word); 描述: 
    DecodeDateTime 方法根据TDateTime类型参数AValue 得到相应的年份、月份、日子、小时、分、秒、毫秒。 判断毫秒级的速度
      

  2.   

    用 duint 测试下就可知性能
      

  3.   

    to  yq3woaini(hahhajing(一星奋斗中...)) 
    纳秒级都不够。to aiirii(ari-爱的眼睛) 
    duint 是什么,麻烦指点?
    但测试没什么意义,只是想了解原因。
      

  4.   

    写了段duint的代码测试下,几乎没有区别type
        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 的介绍在这里
      

  5.   

    我估计,在delphi优化后,你给的两段代码,汇编代码是一样的
      

  6.   

    http://dunit.sourceforge.net/README_CHT.html
      

  7.   

    我对aiirii的测试结果有疑问,没理由这么慢,要25ms.
    两个函数,用时:
    0:00:00.025
    0:00:00.024
      

  8.   

    >>代码1一共执行了1+4+4=9条汇编指令;代码2只执行了2条汇编指令。
    >>估计代码2效率高。我不懂汇编,能详细点吗?听说还有个指令周期的问题,有些指令很花时间的。
      

  9.   

    用GetTickCount函数测试一下不就知道了吗?
      

  10.   

    用GetTickCount函数测试一下不就知道了吗?不知道原理不爽啊。GetTickCount只能计算经过了多少时间,太不准确,一两行语句测不出来,多了受系统影响,如果系统忙,结果很不精确。
      

  11.   

    var
      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
      

  12.   

    你好 你能帮我吗?我是delphi的爱好者,可以告诉我string 和stringlist的区别?怎么用吗?还有:if语句 怎么用?
      

  13.   

    如果pi是常量,那么a := 0.05 * pi是不是应该在编译期就被优化掉了?那么两段代码有什么区别?
    关注...
      

  14.   

    那你自己设一个断点,执行到那里的时候掉出CPU窗口自己看指令数目不久可以了