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 06-05-2006
Perrero80 Perrero80 is offline
Miembro
 
Registrado: may 2006
Posts: 24
Poder: 0
Perrero80 Va por buen camino
Question Liberar memoria

Cuando cierro un programa, la memoria se libera automaticamente? y si es que no, como la libero?.
Responder Con Cita
  #2  
Antiguo 06-05-2006
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,

¿Puedes concretar un poco más?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 06-05-2006
Perrero80 Perrero80 is offline
Miembro
 
Registrado: may 2006
Posts: 24
Poder: 0
Perrero80 Va por buen camino
Mmmmmmmm, bueon, cuando se carga un programa este se guarda en la memoria y quisiera saber si al cerrar un programa (que esta demas decir que es un programa creado en delphi) el espacio que ocupaba en memoria se libera o sigue hay "desperdiciandose".

Entonces en caso de que al cerrar el programa la memoria no se libera, como la libero yo, al programar en delphi que codigo meto al decirle al programa que se cierre o termine.

Espero haber sido claro (ojala).
Responder Con Cita
  #4  
Antiguo 06-05-2006
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,

¿Pero tú tienes algún problema cuando se cierra el programa? ¿Notas algo o qué?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 07-05-2006
Perrero80 Perrero80 is offline
Miembro
 
Registrado: may 2006
Posts: 24
Poder: 0
Perrero80 Va por buen camino
Bueno el programa al cerrar se demora un poco en hacerlo.
Responder Con Cita
  #6  
Antiguo 07-05-2006
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Buenos Aires - Argentina
Posts: 396
Poder: 21
Sotrono Va por buen camino
Cita:
Empezado por dec
¿Pero tú tienes algún problema cuando se cierra el programa? ¿Notas algo o qué?
Para que se ejecute un programa, primero debe cargarse en memoria. Creo que lo que quiere saber Perrero80 es que si cuando se cierra el programa, la memoria que estaba ocupando se libera "sola", o se deben escribir algunas lineas para liberarla.
Era eso???
Responder Con Cita
  #7  
Antiguo 07-05-2006
Perrero80 Perrero80 is offline
Miembro
 
Registrado: may 2006
Posts: 24
Poder: 0
Perrero80 Va por buen camino
Exacto, esa es justamente mi duda...
Responder Con Cita
  #8  
Antiguo 07-05-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Si y no...

La respuesta es SI y NO.

En teoría, y en general en la práctica, al cerrar la aplicación se libera la porción de memoria asignada. Pero... (siempre hay peros) si haces empleos de punteros, debes liberar lo que haz pedido; es decir que por cada New() que hayas realizado, un Dispose() debe ser ejecutado.

Ahora bien, para mayor seguridad existe la sentencia CaFree. Que puede ejecutarse cuando se cierra el formulario. En el evento on Close() debes realizar esto:
Código Delphi [-]
Action := CaFree;

Dicha sentencia permite (y se asegura) de que toda la memoria usada sea liberada (exceptuando los punteros).
Espero que te sirva de ayuda.
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 07-05-2006 a las 06:06:14. Razón: Corrección etiquetas y de aclaciones
Responder Con Cita
  #9  
Antiguo 10-10-2012
Lys Lys is offline
Registrado
 
Registrado: sep 2007
Posts: 4
Poder: 0
Lys Va por buen camino
Cita:
Empezado por Perrero80 Ver Mensaje
Bueno el programa al cerrar se demora un poco en hacerlo.

Hola, yo solucione un problema similar, donde se demoraba en cerrar, simplemente quitandole prioridad a la aplicacion al cerrarla. Me ayudo bastante, ya q, cierra al toque la ventana y queda cerrandose pero no se ve, recupero el escritorio y puedo ir a otras ventanas mientras. Saludos y espero les sirva.

Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

 setPriorityClass(GetCurrentProcess,IDLE_PRIORITY_CLASS);
 SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_IDLE);

 Application.FreeOnRelease;

 Action := caFree;

end;
Responder Con Cita
  #10  
Antiguo 10-10-2012
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Prueba con esto, puedes hacerlo tantas veces como quieras, mira la memoria es el administrador de tareas

Código Delphi [-]
procedure LiberarMemoria;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;

A ver si te ayuda
Responder Con Cita
  #11  
Antiguo 28-09-2016
cheo_CA cheo_CA is offline
Registrado
NULL
 
Registrado: ene 2016
Posts: 5
Poder: 0
cheo_CA Va por buen camino
liberar buffer

como seria para android XE5
Responder Con Cita
  #12  
Antiguo 28-09-2016
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
Cita:
Empezado por cheo_CA Ver Mensaje
como seria para android XE5
Para android, en principio, no necesitas hacerlo, se supone que lo hace automáticamente cuando le hace falta más memoria o recursos.
Responder Con Cita
  #13  
Antiguo 28-09-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
En android se emplea ARC (automatic reference counting) que es similar a como trabajan los record, string e interfaces en Delphi. Básicamente el sistema lleva la cuenta de la cantidad de referencias incrementando o decrementado cuando sea necesario. Cuando la cantidad de referencias llega a 0, se libera la memoria.

Si te fijas la implementación de los destructores, cuando el sistema es ARC, el método Destroy no hace nada
Responder Con Cita
  #14  
Antiguo 06-04-2017
Avatar de darkbits
darkbits darkbits is offline
Miembro
 
Registrado: may 2006
Posts: 280
Poder: 18
darkbits Va por buen camino
Talking liberar memoria en windows10

revivo el tema

con 2 preguntas

como puedo acelerar la carga del programa en delphi tengo mi pc win10 con 8Gb memoria ,la aplicación comienza a cargar los combobox label etc uno por uno lo hace en 3 segundos, pero es notorio a la vista lo que carga lento?

y mi segunda pregunta es como libero memoria hasta windows 7 estos códigos funcionan de primera, ahora estoy trabajando en windows10 y veo que no libera memoria ni el uso del procesador con con los 3 ejemplos q menciona en el post:

Código Delphi [-]
procedure LiberarMemoria;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;


Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

 setPriorityClass(GetCurrentProcess,IDLE_PRIORITY_CLASS);
 SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_IDLE);

 Application.FreeOnRelease;

 Action := caFree;

end;
__________________
Gracias por su coloración club delphi

darkbits ;)
Responder Con Cita
  #15  
Antiguo 06-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por darkbits Ver Mensaje
como puedo acelerar la carga del programa en delphi tengo mi pc win10 con 8Gb memoria ,la aplicación comienza a cargar los combobox label etc uno por uno lo hace en 3 segundos, pero es notorio a la vista lo que carga lento?
Me imagino que la aplicacion hara algo mas a parte de mostrar ComboBoxes y Labels como para que demore en cargar en semejante maquinon, no?
Responder Con Cita
  #16  
Antiguo 06-04-2017
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
Los "hacks" que están de ejemplo en este post *son innecesarios*. Y hasta idiotas. Pa' que carajos estan jodiendo el area de memoria de la app? Y la prioridad de los hilos en un cerrar de formulario???? (plop!!!!!).

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Cita:
Thus, you must use the SetProcessWorkingSetSize function carefully. You must always consider the performance of the whole system when you are designing an application.
-----

Una app al cerrarse libera su memoria. Eso es OBVIO.

AUN SI NO SE LIBERA LA MEMORIA MANUALMENTE!

De no ser así, habría que despedir a los programadores de ese OS*.

https://stackoverflow.com/questions/...atically-freed
Cita:
In general, modern general-purpose operating systems do clean up after terminated processes. This is necessary because the alternative is for the system to lose resources over time and require rebooting due to programs which are poorly written or simply have rarely-occurring bugs that leak resources.
Ahora bien, en Delphi los destructores se usan mas que solo liberar memoria, sino recursos en general, como handles a archivos, conexiones, etc. Asi que hay que usarlos.
---

Cita:
como puedo acelerar la carga del programa en delphi tengo mi pc win10 con 8Gb memoria ,la aplicación comienza a cargar los combobox label etc uno por uno lo hace en 3 segundos, pero es notorio a la vista lo que carga lento?
Cuantos millones de items estas cargando? Como es el codigo que tienes?
__________________
El malabarista.

Última edición por mamcx fecha: 06-04-2017 a las 04:11:28.
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 dll de memoria lgarcia Internet 1 11-08-2005 00:26:29
Liberar memoria Sick boy Varios 6 02-07-2005 10:11:29
Liberar Memoria JoseQ Varios 6 16-07-2004 18:49:21
Liberar memoria del HDC joecool Gráficos 2 17-05-2003 00:28:51
Liberar Memoria JODELSA Varios 4 13-05-2003 17:39:05


La franja horaria es GMT +2. Ahora son las 05:26:59.


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