for k := i to OverLine - 1 do
///////////////////////////////////////
     begin
          i := round((k + 1 - LowerBound) * GData^.MngData.RatioH + GData^.MngData.StartT);
          while (mypt[signum][j].x < i) do
          begin
               if LineData[signum][k].MaxValue < mypt[SigNum][j].Y then LineData[signum][k].MaxValue := mypt[SigNum][j].Y;
               if LineData[signum][k].MinValue > mypt[SigNum][j].Y then LineData[signum][k].MinValue := mypt[SigNum][j].Y;
               inc(t);
               inc(j);
               if (j > high(mypt[SigNum])) then break;
          end;          if t > 0 then
          begin
               LineData[signum][k].StartLen := j - t;
               LineData[signum][k].EndLen := j - 1;
               if LineData[signum][OverLine].MaxValue < LineData[signum][k].MaxValue then LineData[signum][OverLine].MaxValue := LineData[signum][k].MaxValue;
               if LineData[signum][OverLine].MinValue > LineData[signum][k].MinValue then LineData[signum][OverLine].MinValue := LineData[signum][k].MinValue;               if (j > high(mypt[SigNum])) then break;
               t := 0;
          end;
////////////////////////////////////
     end;

解决方案 »

  1.   

    代码原理:
    二维数组mypt[signum][j]为tpoint类型, j从几千可能大到 1m 个
    有OverLine个 LineData结构(j的开始和结束,在这范围内 mypt[][j].y最大和最小值)数值,
     其中,LineData[OverLine ]为前面所有情况LineData[0..OverLine -1]的最大和最小值,也就是最后一个break;前面的两行现在这段代码明显太慢了,没有什么优化的措施不知道是否容易嵌入汇编,也不知道效率能提高多少?