Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Buenos días a todos.

usando la instrucción
Código Delphi [-]
ReportMemoryLeaksOnShutDown := True;

obtengo el mensaje que adjunto (no supe como incrustarlo acá en el mensaje). Me pueden indicar como descifrarlo, porque no lo entiendo muy bien.

Gracias de antemano!
Imágenes Adjuntas
Tipo de Archivo: png imagen.png (7,2 KB, 10 visitas)
Responder Con Cita
  #2  
Antiguo 19-03-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.290
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Fíjate que los tres primeros hacen referencia a clases; TParameters, TList y Tbquix_hilo
Te está diciendo que al acabar el programa no has liberado elemento/s de esas clases.

Si escribes un programa con este código:

Código Delphi [-]
var
  lista1:TList;
begin
  lista1 := TList.Create;
  lista1.Add(Sender);
  // lista1.Free;

Lo ejecutas y lo cierras, obtendrás este mensaje:



Si descomentas la línea del Free y lo vuelves a ejecutrar, verás desaparece.

Por lo tanto en el que te da a tí, revisa los lugares donde estás creando elementos de esas clases para ver si los estás destruyendo correctamente. A medida que vayas corrigiendo los errores, deberían desaparecer de ese mensaje.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 19-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
OK. Muchas Gracias por la aclaración, voy a revisarlo de inmediato, comento los resultados
Responder Con Cita
  #4  
Antiguo 19-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 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
  #5  
Antiguo 20-03-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.290
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Falta código y todavía quedan dudas...

¿Los elementos que creas en el hilo, dónde los destruyes? (por norma lo que se crea en un sitio se destruye en ese mismo sitio

¿Utilizas Shyncronize?
¿Porqué no usas elDestroy del hilo?
No me queda claro que hagas el CoUnInitialize y luego continues trabajando con el Dataset (yo lo pasaría al Destroy).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 20-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Buenos días.

Cuando el hilo se termina el Dataset creado en el mismo se destruye con la instrucción que puse anteriormente.

Los hilos se crean con la instrucción
Código Delphi [-]
FreeOnTerminate := True
, por lo cual deduzco que la propia clase hace el trabajo.

No uso el método Synchronize, puesto que lo único que hago es cuando el hilo termina y me devuelve los datos de la consulta es insertarlo en un TClientDataSet
Responder Con Cita
  #7  
Antiguo 20-03-2019
hal1967 hal1967 is offline
Miembro
 
Registrado: feb 2012
Posts: 32
Poder: 0
hal1967 Va por buen camino
El uso de "TFDConnection"

Siendo que pasasen el constructor "TFDConnection"

realmente no se que más hay con esa conexión (otros dataset o grillas). Asegurate que solo se use en ese hilo,
o no la pases al constructor, solo creala dentro del hilo.


Código Delphi [-]
constructor THiloCheque.create (cone: TFDConnection; const SQL: String);


Puedes hacerlo como prueba, ignora el pase de parámetros y creala en el constructor, y la destruyes en el destroy.
Responder Con Cita
  #8  
Antiguo 21-03-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.290
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por cmfab Ver Mensaje
Cuando el hilo se termina el Dataset creado en el mismo se destruye con la instrucción que puse anteriormente.
... por lo cual deduzco que la propia clase hace el trabajo.

Has creado los Datasets usando como Owner, el objeto Application, por lo tanto deberías revisar ese comportamiento.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecución bloqueada. Hilos de ejecución muli Desarrollo en Delphi para Android 10 28-11-2016 15:16:03
Crear Hilos de Ejecución con TIdFTP JAI_ME Varios 12 13-12-2013 18:28:39
Ayuda con Hilos de ejecucion kurono Varios 19 15-01-2011 15:36:40
Problema con hilos de ejecucion gueritox OOP 1 14-08-2010 15:26:06
Hilos de ejecucion el toluca Varios 2 29-06-2004 22:59:04


La franja horaria es GMT +2. Ahora son las 11:04:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi