Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Liberar memoria de recursos (https://www.clubdelphi.com/foros/showthread.php?t=94054)

usuario1000 09-07-2019 02:04:12

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.

usuario1000 09-07-2019 08:03:55

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;

ecfisa 09-07-2019 20:33:36

Hola.
Cita:

Empezado por usuario1000 (Mensaje 532684)
...
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 :)

usuario1000 10-07-2019 18:53:24

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 (Mensaje 532709)
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 :)


Neeruu 02-08-2019 01:17:47

Yo utilizo FreeAndNil()...

Ejemplo FreeAndNil(qCostes );

Otra cosa es donde estas definiendo las variables... (qCostes, qDocumentos)

usuario1000 03-08-2019 15:58:18

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.


La franja horaria es GMT +2. Ahora son las 10:32:50.

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