daginn, Ég er að verða nett geðveikur á því að reyna að lesa access grunn í Tlist, og síðan uppfæra listann reglulega, eyða honum og lesa aftur í hann.
Á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.