知识库 > Tinysoft代码优化 > 2 优化技巧

2.8 []运算的优化    

  • 我们来看看下面一段代码所使用的时间:

    Function demo_timeq();
    Begin
      a := array();
      for i:= 0 to 99 do
       a[i] := demof();
      return a;
    End;

    function demof();
    begin
      a := 100;
      b := rand(100,100);
      b := select * from infotable 44 of "SZ000002" where ["截止日"]>20030101 end;
      return a+1;
    end

    主要关注代码中的粗体部门,[]所耗的时间是0.077,如果我们将它换成:

    b := select * from infotable 44 of "SZ000002" end;
    b :=select * from b where ["截止日"]>20030101 end;   //内存中的表

    []所耗的时间是0.0081,降低了很多,说明基于服务器端的一张表格做select语句中,频繁的使用[],效率是比较低的。所以需要多次利用的数据,可以先从数据仓库中取出然后操作。

    Function demo_timeq();
    Begin
      mtic;
      b := rand(100,10000);
      a := array();
      for i:= 0 to 99 do
       a[i] := demof(b);
      return mtoc;
    End;
    function demof(b);
    begin
      a := 100;
      if ifnil(b[10]) then c:=1;
      return a+1;
    end


        
    返回优化信息我们看到if和table花销时间是比较多的,table开销主要是[]运算的开销。直接运行时间是0.3474,我们删掉粗体字标示的语句后所需要的时间是0.0882,如果换成:

    if ifnil(b[10][0]) then c:=1;

    时间和删除该句是差不多的,为0.0966。为什么?因为b[10]取的是10000个的一维数组!