Ver Mensaje Individual
  #16  
Antiguo 19-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Reputación: 14
cmfab Va por buen camino
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 ?.
Responder Con Cita