Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-07-2019
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 8
usuario1000 Va por buen camino
Liberar memoria de recursos

Buenas a todos,
Utilizo una aplicación dataSnap con Delphi Seatle, programada por mi, en el trabajo y me está empezando a dar un poco de dolor de cabeza. La aplicación la utilizan varios usuarios y parece que iba bien, pero ahora se está comportando un poco rara, y me dá que no se liberan los recursos que utilizo y me explico...
Si en una función utilizo lo siguiente:

Código Delphi [-]
  qCostes := TFDquery.Create(Application);
  qCostes.Connection := conexion;
  qDocumentos := TFDquery.Create(Application);
  qDocumentos.Connection := conexion;
  qCostes.Close;
  qCostes.sql.Clear;
  qDocumentos.Close;
  qDocumentos.SQL.Clear;
  .   .   .
  qCostes.Free;
  qDocumentos.Free;





Entiendo que de esta manera se liberan los recursos utilizados, no????

El servidor cuando lo cierro, se queda colgado con el reloj de arena mostrando las letras "SQL" debajo de él. En todos las funciones donde creo un componente tipo TFDQUERY lo creo y lo elimino de la manera descrita anteriormente.


Es cierto que también utilizo componentes TFDQUERY que he agregado en tiempo de diseño, aunque ahora lo que hago es crearlos en tiempo de ejecución en las nuevas funciones que utilizo, me parece más limpio y más claro, pero algo debe estar fallando.


Se agradece cualquier aclaración al respecto...



Gracias.

Última edición por Ñuño Martínez fecha: 09-07-2019 a las 12:01:19. Razón: Etiquetas "[delphi]".
Responder Con Cita
  #2  
Antiguo 09-07-2019
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 8
usuario1000 Va por buen camino
Código Delphi [-]
qCostes := TFDquery.Create(Application); 
qCostes.Connection := conexion; 
qDocumentos := TFDquery.Create(Application);
qDocumentos.Connection := conexion;
qCostes.Close; qCostes.sql.Clear;
qDocumentos.Close;
qDocumentos.SQL.Clear;
 . . . 
qCostes.Free;
qDocumentos.Free;
Responder Con Cita
  #3  
Antiguo 09-07-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por usuario1000 Ver Mensaje
...
Entiendo que de esta manera se liberan los recursos utilizados, no????
Si, pero de ese modo y de producirce una excepción luego de haberse creado los recursos, estos podrían no ser devueltos.

Te convendría asegurar que los recursos otorgados sean liberados de este manera:
Código Delphi [-]
  qCostes := TFDquery.Create(Application);
  try
    qCostes.Connection := conexion;
    qDocumentos := TFDquery.Create(Application);
    try
      qDocumentos.Connection := conexion;
      qCostes.Close;
      qCostes.sql.Clear;
      qDocumentos.Close;
      qDocumentos.SQL.Clear;
      .   .   .
    finally
      qDocumentos.Free;
    end;
  finally
    qCostes.Free;
  end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 10-07-2019
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 8
usuario1000 Va por buen camino
Ya lo contemplaba, solo me refería si estaba utilizando la instrucción correcta, es decir el ".free", porque por ahí he visto tambien el ".disposedOf" y ya me estaba entrando la duda.



Muchas Gracias.






Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Si, pero de ese modo y de producirce una excepción luego de haberse creado los recursos, estos podrían no ser devueltos.

Te convendría asegurar que los recursos otorgados sean liberados de este manera:
Código Delphi [-] qCostes := TFDquery.Create(Application); try qCostes.Connection := conexion; qDocumentos := TFDquery.Create(Application); try qDocumentos.Connection := conexion; qCostes.Close; qCostes.sql.Clear; qDocumentos.Close; qDocumentos.SQL.Clear; . . . finally qDocumentos.Free; end; finally qCostes.Free; end;


Saludos
Responder Con Cita
  #5  
Antiguo 02-08-2019
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 484
Poder: 17
Neeruu Va por buen camino
Yo utilizo FreeAndNil()...

Ejemplo FreeAndNil(qCostes );

Otra cosa es donde estas definiendo las variables... (qCostes, qDocumentos)
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #6  
Antiguo 03-08-2019
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 8
usuario1000 Va por buen camino
Buenas a todos,


El servidor se me queda colgado en la siguiente instrucción:


Código Delphi [-]
ServerContainer1.DSServer1.Stop;


¿por qué se puede quedar colgado ahí??


Esa instrucción la utilizo para cerrar el servidor y reiniciar la aplicación por el motivo que sea, pero nunca se cierra. Tengo que "matar" el programa(servidor) desde Windows.



Gracias a todos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Liberar memoria ZayDun Varios 3 13-07-2014 16:31:12
Pregunta tonta sobre TStringList y liberar recursos blueicaro OOP 7 28-10-2007 22:46:44
Liberar memoria luiggixD Varios 1 02-01-2007 12:22:35
Liberar dll de memoria lgarcia Internet 1 11-08-2005 01:26:29
Liberar Memoria susje Varios 3 01-08-2003 00:18:18


La franja horaria es GMT +2. Ahora son las 23:58:55.


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