Ein Programm muss für Kunden Abrechnungsdaten aus Dbase-Tabellen auslesen, vergleichen und diese dann in eine Oracle DB (Ver. 8.1) wegschreiben. Da die Anwendung zeitkritisch ist, habe ich zwei Threads definiert die zwei der Tabellen abarbeiten sollen.<br>Alles lief gut bis die Kundenanzahl immer grösser wurde. Ich stelle fest, das der RAM pro verarb. Kunde um ca. 250 Kb erhöht wurde, was dann irgendwann zum Exodus führt. Die Threads werden pro Kunde neu anglegt... <p>
TScanThread = class(TThread): <br>
private<br>
FQuery : TADOQuery;<br>
FTable : TTable;<br>
FCustNo : string;<br>
procedure FillBacklog;<br>
...<br>
constructor TScanThread.Create(Query: TADOQuery; Table: TTable; CustNo: string);<br>
begin<br>
inherited Create(False);<br>
FCustNo := CustNo;<br>
FQuery := Query;<br>
FTable := Table;<br>
FreeOnTerminate := True;<br>
end;<p>
... erfüllen ihre Aufgabe, und werden über - FScanThread.Free; - wieder freigegeben. Die Frage lautet nun, wo wird Speicher belegt bzw. wie bekomme ich ihn wieder. Jeder Thread hat seine eig. ADO-Con. über OLE-DB. Für Hilfe wäre ich sehr dankbar<br> mfg Rainer Schmidt
TScanThread = class(TThread): <br>
private<br>
FQuery : TADOQuery;<br>
FTable : TTable;<br>
FCustNo : string;<br>
procedure FillBacklog;<br>
...<br>
constructor TScanThread.Create(Query: TADOQuery; Table: TTable; CustNo: string);<br>
begin<br>
inherited Create(False);<br>
FCustNo := CustNo;<br>
FQuery := Query;<br>
FTable := Table;<br>
FreeOnTerminate := True;<br>
end;<p>
... erfüllen ihre Aufgabe, und werden über - FScanThread.Free; - wieder freigegeben. Die Frage lautet nun, wo wird Speicher belegt bzw. wie bekomme ich ihn wieder. Jeder Thread hat seine eig. ADO-Con. über OLE-DB. Für Hilfe wäre ich sehr dankbar<br> mfg Rainer Schmidt
Comment