在程式運行程序中,會不斷地給一個這樣的陣列中插入記錄,隨著資料的不斷增加,記憶體也達到了100%,所以
在想,怎么可以刪掉一部分記錄?各位大俠幫幫忙,在線等,非常著急!
type
TprocessReceive = record
fstr: string[30];
fld_flagyzm :integer;
end;
ArrayprocessReceive : Array of TprocessReceive ;
uj5u.com熱心網友回復:
沒有人回答嗎
自己頂!
uj5u.com熱心網友回復:
假如你是new 的 那就dispose掉uj5u.com熱心網友回復:
可我這不是阿!
uj5u.com熱心網友回復:
動態陣列可以用Move函式再SetLength
uj5u.com熱心網友回復:
這種情況可能用TList管理起來方便點uj5u.com熱心網友回復:
procedure TForm3.Add;
begin
inc(Count);
SetLength(ArrayprocessReceive, Count);
ArrayprocessReceive[Count - 1].fstr := 's' + IntToStr(Count);
ArrayprocessReceive[Count - 1].fld_flagyzm := Count;
end;
procedure TForm3.Del(const index : Integer);
begin
if (Index < 0) or (Index >= Count) then
raise Exception.Create('Argument out of range');
Dec(Count);
if index <> Count then
begin
Move(ArrayprocessReceive[index + 1], ArrayprocessReceive[index], (Count - index) * SizeOf(TprocessReceive));
SetLength(ArrayprocessReceive, Count);
end;
end;
procedure TForm3.btn1Click(Sender: TObject);
begin
Add;
end;
procedure TForm3.btn2Click(Sender: TObject);
begin
Del(0);
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
Count := 0;
end;
uj5u.com熱心網友回復:
將此結構體做成類。然后再用TObjectList<T>,來進行管理。
uses
Generics.Collections;
type
TProcessReceive = class(TObject)
private
FstrMsg: string;
Ffld_flagyzm: Integer;
procedure Setfld_flagyzm(const Value: Integer);
procedure SetstrMsg(const Value: string);
protected
public
constructor Create;
destructor Destroy; override;
published
property strMsg: string read FstrMsg write SetstrMsg;
property fld_flagyzm: Integer read Ffld_flagyzm write Setfld_flagyzm;
end;
var
ObjList: TObjectList<TProcessReceive>; //用泛型來管理。
uj5u.com熱心網友回復:
TObjectList<T>現在支持了。uj5u.com熱心網友回復:
記憶體表也可以啊。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/122357.html
標籤:語言基礎/算法/系統設計
