動態 Array 如何釋放?? |
缺席
|
TTS
初階會員 發表:72 回覆:66 積分:27 註冊:2003-05-06 發送簡訊給我 |
procedure TfmKInpHl.FVisualwkBeforePost(DataSet: TDataSet);
type TwkAcntData = Record wkCode: String; wksTime: TDate; wkeTime: TDate; end; var ArrwkAcntData: Array of TwkAcntData; function SetArrDataToChk(FTable: TTable;const sCode: String;const sTime, eTime: TDate): Boolean; var I: Integer; begin Result:= False; with FTable do begin I:= 0; First; while not Eof do begin ArrwkAcntData[I].wkCode := FieldByName('PriceCode').AsString; ArrwkAcntData[I].wksTime := FieldByName('StartDateTime').AsDateTime; ArrwkAcntData[I].wkeTime := FieldByName('EndDateTime').AsDateTime; Next; Inc(I); end; for I:= 0 to RecordCount-1 do begin if (sCode = ArrwkAcntData[I].wkCode) then begin if ((ArrwkAcntData[I].wksTime <= sTime) and (sTime <= ArrwkAcntData[I].wkeTime)) or ((ArrwkAcntData[I].wksTime <= eTime) and (eTime <= ArrwkAcntData[I].wkeTime)) then begin Result:= True; Break; end; end; end; end; end; begin with TestTable do begin SetLength(ArrwkAcntData, 0); DisableControls; try SetLength(ArrwkAcntData, RecordCount); if SetArrDataToChk(dmPHlAcnt.cwtblInpDtlAcnt, FieldByName('PriceCode').AsString, FieldByName('StartDateTime').AsDateTime, FieldByName('EndDateTime').AsDateTime) then sResult:= sResult _ErrOverLap _ErrSpace; finally EnableControls; end; finally if sResult <> '' then Raise Exception.Create(sResult); end; end; end; 依以上的程式 當Table有很多筆(20筆以上)時會造成Stack Overflow 請問有什麼方式可以讓ArrwkAcntData 每一次用完就完整釋放掉記憶體??? |
mreay
一般會員 發表:0 回覆:1 積分:0 註冊:2006-10-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |