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 13-07-2014
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Liberar memoria

Estoy utilizando el componente IdHTTP1, pero tengo una duda sobre su uso correcto para liberar memoria, he visto que se libera mediante IdHTTP1.Free pero cuando se debe de liberar y donde?

por lo que he visto en este foro la forma correcta es así..

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  IdHTTP: TIdHTTP;
begin
  IdHTTP := TIdHTTP.Create;
  try
    try
      IdHTTP.Get('http://www.clubdelphi.com');
    except
        end;
  finally
    IdHTTP.Free;
  end;
end;
mi duda es que dentro de un solo botón tengo varias peticiones de Get y Post, tendría que colocar un "try" "except" "finally" por cada conexión que realiza? Espero que alguien me pueda aclarar esto ya que el programa empieza con poco uso de memoria y durante su uso se dispara llegando a dejar la aplicación bloqueada.
Responder Con Cita
  #2  
Antiguo 13-07-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Quédate con la idea: creas un objeto cuando lo vayas a usar, y, lo destruyes cuando ya no lo vayas a necesitar. "Try" y "Finally" sirve para garantizar, que, aun en el caso de error, "Finally" sería ejecutado, y, por lo tanto, nuestro objeto destruido. Pero, tú puedes usar tantas veces como quieras el objeto en cuestión, en este caso, realizar varias peticiones HTTP, liberando o destruyendo el objeto al final, cuando ya no lo necesites.

Otra opción sería declarar alguna variable donde guardar la instancia del objeto, o sea, fuera del procedimiento local "Button1Click", usar aquí dicha variable, y, liberarla cuando nuestro programa terminase, por ejemplo, en todo caso cuando el objeto ya no nos fuera necesario. Pero dicho mal y pronto algo como esto, que, parece ser lo que ahora te preocupa:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  IdHTTP: TIdHTTP;
begin
  IdHTTP := TIdHTTP.Create;
  try
    try
      IdHTTP.Get('http://www.clubdelphi.com');

      IdHTTP.Get('http://www.clubdelphi.com');

      IdHTTP.Get('http://www.clubdelphi.com');

      IdHTTP.Get('http://www.clubdelphi.com');
    except
    end;
  finally
    IdHTTP.Free;
  end;
end;

... es perfectamente válido. No necesitas liberar el objeto a cada petición HTTP, sino que puedes reutilizarlo si quieres, y, liberarlo sólo al final, cuando ya no es necesario. Por lo demás no es bien dejar el "except" vacío, puesto que si ocurriese un error, simplemente, se ocultaría, lo que nos nos serviría de mucho a lo hora de solucionarlo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 13-07-2014
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Muchas gracias dec por la aclaración me quedo todo muy claro, ahora ya entiendo el funcionamiento correcto y no ponerlo únicamente por que si..
Responder Con Cita
  #4  
Antiguo 13-07-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Libro de lectura obligada, La cara oculta de Delphi
A partir de la página 220, creo recordar.
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
Liberar memoria luiggixD Varios 1 02-01-2007 11:22:35
Liberar memoria vicvil Varios 13 30-10-2006 17:14:38
Liberar memoria Sick boy Varios 6 02-07-2005 10:11:29
Liberar memoria de un QR. mlara Impresión 1 21-02-2004 18:31:16
Liberar Memoria susje Varios 3 31-07-2003 23:18:18


La franja horaria es GMT +2. Ahora son las 09:24:26.


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