Ástæðan er sú að ef ég les t.d. streng sem er ‘flytjandi’ og það um 500.000 sinnum, gerir það lítið.. tekur 2mb í minni og þegar ég les aftur fríar það minnið og tekur svo aftur um 2mb.
Prófa þetta síðan með þvi að lesa úr grunni, bara fyrstu linuna 500.000 sinnum inn, og hvað gerist.. forritið tekur geðveikt minni og þegar ég les aftur þá fríar hún ekki minnið, heldur safnast það upp og næst vélinn verður out of memory, ég get komist hjá því með því að gera minimize og maximize og þá fríast allt.. Stórfurðulegt dæmi. Skoðið dæmið hérna fyrir neðan..
//lag.name := ‘flytjandi’; VIRKAR!!!!
lag.name := ADOQsongs2.FieldValues['flytjandi']; virkar ekki fullkomlega!!!!
Dæmi
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, DB, ADODB, DBTables; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOQsongs2: TADOTable; Button4: TButton; procedure Button4Click(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; [b] Ttest = class Name : string; end;[/b] var Form1: TForm1; [b] lagalisti : Tlist;[/b] NewMemMgr: TMemoryManager; implementation uses Unit2, Unit3; {$R *.dfm} [b] procedure TForm1.Button4Click(Sender: TObject); var lag:Ttest; I:integer; flytjandi :string; begin lagalisti.free; lagalisti := Tlist.Create; for i := 0 to 500000 do begin lag := Ttest.create; //lag.name := 'flytjandi'; lag.name := ADOQsongs2.FieldValues['flytjandi']; lagalisti.add(lag); lag.free; end;[/b] end; end.