Bueno, sigo sin poder resolver el problema. El consumo excesivo de la memoria está en el hilo, ya lo he reprogramado de muchas maneras, he usado un Timer sin el hilo y todo sigue mal. no veo que se queden sin liberar recursos, en el resultado de la instrucción
Código Delphi
[-]ReportMemoryLeaksOnShutDown := True;
lo que tengo en esta clase son 6 strings con contenidos SQL, no se porque me hace referencia a ellos. acá el código de la clase del hilo
Código Delphi
[-]
Tbquix_hilo = Class(TThread)
Constructor Create(ConnectionString,SQL1,SQL2,SQL3,SQL4,SQL5,SQL6:String; tipoT:Integer);
private
FSQL1,FSQL2,FSQL3,FSQL4,FSQL5,FSQL6: String;
FConnection: String;
FTipoT:Integer;
Data1,Data2, Data3, Data4,Data5, Data6: TADODataset;
Protected
Procedure Execute; override;
public
Property DataCheqDet: TADODataset read Data1 write Data1;
Property DataCheq: TADODataset read Data2 write Data2;
Property DataFactDet: TADODataset read Data3 write Data3;
Property DataFact: TADODataset read Data4 write Data4;
Property DataCMDet: TADODataset read Data5 write Data5;
Property DataCM: TADODataset read Data6 write Data6;
End;
la definición del constructor
Código Delphi
[-]constructor Tbquix_hilo.Create(ConnectionString,SQL1,SQL2,SQL3,SQL4,SQL5,SQL6:String; tipoT:Integer);
begin
inherited Create(false);
FConnection := Connectionstring;
FSQL1 := SQL1;
FSQL2 := SQL2;
FSQL3 := SQL3;
FSQL4 := SQL4;
FSQL5 := SQL5;
FSQL6 := SQL6;
FTipoT := tipoT;
end;
y el método de ejecución
Código Delphi
[-]procedure Tbquix_hilo.Execute;
begin
inherited;
CoInitialize(nil);
if (FtipoT = 0) or (FtipoT = 1) then begin
Data1 := TAdodataset.Create(Application);
Data1.ConnectionString := FConnection;
Data1.commandtext := FSQL1;
Data1.Open;
end;
CoUnInitialize;
end;
y cuando el hilo termina lo único que hago es leer los datos de ADODataset y copiarlos a un TClientDataset, después libero los objetos con esta instrucción:
Código Delphi
[-]Tbquix_hilo(Sender).DatacheqDet.Free;
y así para las 6 consultas, parece muy básico y sencillo.
no tengo idea porque se dispara la memoria, no actualizo controles de la VCL en el hilo, no uso variables globales. Que puede estar pasando ?.