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 16-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Son pocos los registros que trae, en las pruebas que estoy haciendo no más de 5, y demora unos 3, 4 segundos
Responder Con Cita
  #2  
Antiguo 16-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿4 registros y 4 segundos?

¿Para qué se necesitan los hilos?
Responder Con Cita
  #3  
Antiguo 16-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Los hilos se necesitan porque la consulta puede ser mayor, además el tema es que esta aplicación va a conectarse a una base de datos de una empresa que está trabajando todo el tiempo con su plataforma y los registros que genere de cheques van a ser procesados por esta app externa. la idea es que trabaje en segundo plano sin intervención del usuario.
Responder Con Cita
  #4  
Antiguo 18-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.286
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
¿Seguro que estás liberando todos los recursos creados?
Prueba a activar ReportMemoryLeaksOnShutdown (busca en los foros si no te suena) para ver si se te están quedando recursos "colgados".
¿Dónde están definidos los procedimientos: TerminaHiloChequeDet y TerminaHiloCheque?
__________________
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
  #5  
Antiguo 18-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Buenos días.

Gracias por responder, les comento que sigo complicado con este asunto que parece tan sencillo.

He decidido crear una unidad aparte para probar la aplicación sin hilos y me doy cuenta que el uso de la memoria aumenta considerablemente hasta que se llega al out memory. acá dejo el código, solo creo un objeto TADOconnection y un TADODataset que se destruyen a ki entender correctamente.

Ya he activado el ReportMemoryLeaksOnShutDown := True y no me arroja ninguna violación de memoria.

Código Delphi [-]
procedure importaDatos(tipoTransaccion:Integer);
var
  tabla: TAdoDataset;
  cone: TAdoConnection;
begin
   cone := TAdoconnection.Create(application);
   cone.ConnectionString := cadenaConexion;
   cone.LoginPrompt := false;
   try
     cone.Connected := true;
     tabla := TAdoDataset.Create(application);
     tabla.Connection := cone;

     if (tipoTransaccion = 0) or (tipoTransaccion = 1) then begin
        conecta.cheq.Close;conecta.cheqDet.Close;
        try
          tabla.close;
          tabla.CommandText := 'Select * from checkLine ';
          tabla.Open;
          conecta.cheqdet.Recordset := tabla.Recordset;
        Except
          on e:Exception do
             InsertaLog ('Error al capturar los detalles de los cheques ' + e.message);
        end;
     end;
   Except
     on e:exception do begin
        InsertaLog('No se pudo establecer la conexion ' + e.Message);
        cone.Free;
        tabla.Free;
        exit;
     end;
   end;
   tabla.close;
   cone.close;
   tabla.free;
   cone.free; 
end;


Este código lo ejecuto cada unos 20 segundos en un Timer
Responder Con Cita
  #6  
Antiguo 18-03-2019
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Bueno, sigo probando y con solo ejecutar el código de conexión a la Base de Datos comienza a subir el consumo de memoria. En buena teoría se ejecute o no la conexión al final debería destruirse el objeto.

Código Delphi [-]
try
      cone.Connected := true;
 Except

 end;
 cone.Free;
Responder Con Cita
  #7  
Antiguo 18-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.286
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
Ya he activado el ReportMemoryLeaksOnShutDown := True y no me arroja ninguna violación de memoria.

Eso no te va a reportar ninguna violación de memoria.
Sirve para (como bien dice su nombre) reportar pérdidas de memoria (normalmente por recursos no liberados correctamente) al finalizar la aplicación.
__________________
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
  #8  
Antiguo 18-03-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Como mides el consumo de memoria? Usar el task manager, no importa el OS, no es muy util porque los OS actuales cachean memoria que da loco y pueden reportar que "usan" el 90% de la memoria pero no es la que EN ESTE INSTANTE esta usando la app, es la que el OS le cachea en el tiempo.

Tienes que usar un profiler especializado, o mirar los contadores de windows para precision....

-----

Hay varias cosas que resaltan, pero estas son las mas sospechosas:

1- Lo PEOR: Usas referencias globales! MAXIMO ERROR EN MULTI HILOS! NUNCA usar globales en multi hilos. Nunca. Eso no solo crea contención, sino que GARANTIZA DEADLOOCKS en un lenguaje como Delphi.

2- Me late que el mayor problema es:

Código Delphi [-]
conecta.cheqdet.Recordset := tabla.Recordset;

Como le asignas un POINTER de un objeto a OTRO, usando una INTERFACE que es refcounted????

3- Usar un timer... ok, pero es mucho mas simple si usas un ciclo con un sleep. Luego mira como reestructuras el código para formar una maquina de estados. Eso debe hacer el código mas claro y eliminar bugs que da miedo. Esto ademas elimina el problema de que cuando tengas un error, vas a reintentar de forma infinita hasta que muera el programa, que asi es como esta...

4- O mejor usa una librería adecuada para eso, quizás http://docwiki.embarcadero.com/RADSt...amming_Library.
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 18-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.286
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
acá dejo el código, solo creo un objeto TADOconnection y un TADODataset que se destruyen a ki entender correctamente.

Personalmente creo que deberías utilizar try..finally para liberar recursos, en lugar de hacerlo en los try..except
Cada estructura tiene su función y el try..except se usa para capturar excepciones.
Mezclar la gestión de errores, con la liberación de recursos, no me parece buena idea.

AÑADO: Además veo que en algún caso, puedes estar intentando destruir cosas que aun no has creado (por ejemplo, si se produce algún problema al conectar).
__________________
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 10:00: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