全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3166
推到 Plurk!
推到 Facebook!

動態 Array 如何釋放??

缺席
TTS
初階會員


發表:72
回覆:66
積分:27
註冊:2003-05-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-25 11:21:21 IP:211.72.xxx.xxx 訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-10-29 20:17:10 IP:221.226.xxx.xxx 未訂閱
将数组申明为全局应该就可以!
系統時間:2024-04-25 18:20:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!