FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[2652] 처리속도 질문.. 당췌 어디 문제인지 모르겠네요...
무식이... [wanghimn] 2017 읽음    2007-11-21 11:57
SQL문으로 처리 할수 없는 함수가 있기 때문에 Stored Procedure를 사용하지 못하고
1초 단위 데이타(2048 Rows)를 받아서 아래와 같은 코드로 처리 하고 있습니다.

Function TInterfaceClass.GetAccData(STime, ETime : String; MIP: DWord; RDCnt, SKipCnt: Int64; FS: Word; Var PGBar:TJaheonGauge): Boolean;
var
  L_RDCNT   : integer;
  L_SKipCnt : integer;
  DataCnt   : integer;
  RPM       : Word;
  RPM0      : Word;

  Label StartHere;
  Label GoQuery;
  Label ProcessEnd;
begin
  Result := False;

  TimeCnt := 0;

StartHere :
  DataCnt := 0;

  inc(TimeCnt);

  L_SKipCnt := RDCnt * (TimeCnt - 1);

  PGBar.Progress := TimeCnt;

  with RMSIWQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add(' Select First ' + inttostr(FS) + ' SKIP ' + inttostr(L_SKipCnt) + ' LOGTIME, ListNum, RPM, RPM0, X_Acc, Y_Acc, Z_Acc from TBVIBDATA ');
    SQL.Add(' Where (LOGTIME >= ' + STime + ') and (LOGTIME <= ' + ETime + ')');
    Open;

    FetchAll;

    if RecordCount = 0 then
    begin
      PGBar.Progress := PGBar.MaxValue;
      ReadDataCnt    := TimeCnt - 1;

      goto ProcessEnd;
    end;

    first;

    while Not EOF do
    begin
      inc(DataCnt);
      LOGTIME[TimeCnt-1]   := FieldByName('LOGTIME').AsString;
      RPM                  := FieldByName('RPM').AsInteger;
      SECRPM[TimeCnt-1]    := RPM;
      RPM0                 := FieldByName('RPM0').AsInteger;
      ACCDATA_X[DataCnt-1] := FieldByName('X_Acc').AsFloat;
      ACCDATA_Y[DataCnt-1] := FieldByName('Y_Acc').AsFloat;
      ACCDATA_Z[DataCnt-1] := FieldByName('Z_Acc').AsFloat;

      Next;
    end;

    CalGetData(TimeCnt-1,ACCDATA_X,ACCDATA_Y,ACCDATA_Z,FS,RPM0,RPM);


    Application.ProcessMessages;
  end;

  goto GoQuery;

GoQuery:
  goto StartHere;

ProcessEnd:

  Result := True;
  Exit;

end;

/////////////////////////////////////////////////////////////////////////

CalGetData, Display, Progress 등을 허지 않아도 120초(120번 재귀 호출)의 데이터를 처리하는데
20초 정도 시간이 소모 됩니다.

20분 데이터를 처리 할때는 너무 느려서 시간 계산이 불능.

개발 환경은 XP, 시스템 백업 사용 않함 설정, E6800, 메모리 2기가, Delphi 2007인데 잘못생각하고
있는 부분이나 코드가 잘못된 부분을 지적해 주시면 감사하겠습니다.

+ -

관련 글 리스트
2652 처리속도 질문.. 당췌 어디 문제인지 모르겠네요... 무식이... 2017 2007/11/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.