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 (https://www.clubdelphi.com/foros/showthread.php?t=31409)

Perrero80 06-05-2006 21:28:19

Liberar memoria
 
Cuando cierro un programa, la memoria se libera automaticamente? y si es que no, como la libero?.

dec 06-05-2006 21:45:25

Hola,

¿Puedes concretar un poco más?

Perrero80 06-05-2006 22:24:16

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).

dec 06-05-2006 23:04:41

Hola,

¿Pero tú tienes algún problema cuando se cierra el programa? ¿Notas algo o qué?

Perrero80 07-05-2006 01:02:02

Bueno el programa al cerrar se demora un poco en hacerlo.

Sotrono 07-05-2006 01:03:29

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??? :confused:

Perrero80 07-05-2006 04:12:12

Exacto, esa es justamente mi duda...:p

Delphius 07-05-2006 06:01:38

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.

Lys 10-10-2012 07:24:27

Cita:

Empezado por Perrero80 (Mensaje 135709)
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;

cesarsoftware 10-10-2012 10:13:25

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

cheo_CA 28-09-2016 03:25:55

liberar buffer
 
como seria para android XE5

Casimiro Notevi 28-09-2016 12:20:39

Cita:

Empezado por cheo_CA (Mensaje 509168)
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.

AgustinOrtu 28-09-2016 14:25:35

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

darkbits 06-04-2017 00:20:59

liberar memoria en windows10
 
revivo el tema :D

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;

AgustinOrtu 06-04-2017 00:24:14

Cita:

Empezado por darkbits (Mensaje 515226)
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?

mamcx 06-04-2017 04:07:10

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?


La franja horaria es GMT +2. Ahora son las 04:31:03.

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