Delphi - Liberar forms de memoria

 
Vista:

Liberar forms de memoria

Publicado por Nando (26 intervenciones) el 09/10/2004 17:36:41
Hola: Uno de los temas que siempre presenta dificultades en mis programas es lo pesado que quedan cuando uno no emplea o ubica bien en el archivo fuente las instrucciones tipo form1.free form refresh, etc.

Alguien puede explicar o dar un ejemplo de como colocar estos en forma correcta en el programa ? ? ? Inclusive para las figuras *.bmp.

Muchas gracias a quien lo pueda hacer
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Liberar forms de memoria

Publicado por M@arceloL (213 intervenciones) el 09/10/2004 23:08:21
Bueno, es un tema para discutir, pero yo creo que las formas deben ser creadas justo antes de llamarlas y destruirlas justo después de cerrarlas. Por ejemplo, si tu programa tiene una ventana de "configuración", deberías crearla cuando el usuario elija "configuración" y destruirla después de hacer lo tuyo con los cambios que el usuario introdujo. Crearla y destruirla quedaría en tu forma principal o quien la "muestre".
Con la formas que tienen imágenes o que cargan cosas de archivos, sin embargo, puede ser diferente. Si tu forma tiene una imágen grande, crearla y destruirla va a hacer que tarde en mostrarse, porque al crearla hay que cargar los datos o la imagen. Claro que tener un bitmap de un par de megas en memoria todo el tiempo es algo costoso...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar forms de memoria (parte 2)

Publicado por M@rceloL (213 intervenciones) el 09/10/2004 23:11:14
No me dejaba mandar todo el texto por ser muy largo, así que acá te mando el resto...

En general, según yo, lo ideal es ver qué ventanas se van a usar frecuentemente y esas dejarlas cargadas siempre. Por ejemplo, una ventana propia para una opción, supongamos, "Abrir Archivo", debería crearse una sola vez, y destruirse una sola también (cuando se cierre el programa) porque se usa mucho. En cambio, si tu ventana "Acerca de..." tiene un bitmap pesado, y por eso tarda demasiado en crearse cada vez que se quiere mostrar: uno tiene que pensar "¿Qué tan seguido un usuario accede a esta ventana?" La respuesta, claro, es "Nunca" o "Muy rara vez". Por lo que no vale la pena desperdiciar memoria para algo que, al final de cuentas, va a ser visto muy de vez en cuando, y por lo cual el usuario puede esperar un par de segundos hasta que cargue, es una firme candidata para crearla y destruirla cada vez.

Ah, por cierto, por si no sabés cómo se crea y destruye una forma en tiempo de ejecución, preguntá que contestamos con gusto.

Espero te sirva. Saludos y felices compiladas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar forms de memoria (parte 2)

Publicado por nando (26 intervenciones) el 10/10/2004 23:05:34
Ante te quiero agradecer mucho tu respuesta.
Es verdad crear y destruir en tiempo de ejecucion es más que importante. Uso mucho bitmaps, principalmente en agenda de fotos o como logos ec.
Colocar o dar la orden para liberar de memoria cuando cierro form es mi problema.
Lo que puedas aclararme es muy bienvenido!!!
Muchas gracias y espero tu amable alaración del tema.
Nando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar forms de memoria (parte 2)

Publicado por M@rceloL (213 intervenciones) el 11/10/2004 22:09:47
Bueno. La respuesta era muy larga, así que te la mandé por correo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar forms de memoria

Publicado por Ing. Francisco H. Arena (140 intervenciones) el 13/10/2004 14:30:23
En el procedimiento que maneja el evento OnClose de cualquier formulario existe un parámetro llamado Action, a éste debe se ñe debe asignar caFree para liberar la memoria ocupada por dicho formulario.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
Action:= caFree;
end;

Con respecto a los bitmaps, si estos estan insertados en el formulario dentro de un TImage, el formulario a ser el objeto padre y contenedor de esos graficos, es el encragado de liberarlos automaticamente.

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar