FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Liberar forms
Hola compañeros:
¿Sabéis como se puede liberar la memoria de un Form?. Actualmente realizo estos procedimientos, pero realmente no me libera la memoria: Ejemplo 1
Ejemplo 2
|
#2
|
||||
|
||||
Cita:
El Ejemplo 2, es la mejor forma de hacerlo, también está el FreeAndNil(fVentana) que hace lo mismo pero en una sola línea. Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
#3
|
||||
|
||||
En realidad ambos son iguales en cuanto a la liberación de memoria, ya que la instrucción que realmente libera la memoria es el FREE. La asignación a nil, simplemente asigna ese valor a la variable que apunta al form, pero en ese momento la memoria ya se ha liberado(*).
(*)Recuerda, que el sistema no libera la memoria inmediatamente, así que si miras la memoria que consume tu programa, tal vez después de hacer el FREE, la cantidad de memoria libre siga siendo la misma que antes de hacerlo; Es normal, pues lo que hace el sistema es "marcar" determinada memoria, como que está "libre", pero no la libera en ese momento de forma explícita. Queda marcada y en el momento que el sistema la necesita "recopila" esas zonas "marcadas para liberar" y las "libera" todas al mismo tiempo. Tal como comenta [olbeup], puedes usar un FreeAndNil, que lo que hace es hacer el FREE y la asignación en una misma instrucción(línea). La asignación a NIL, aunque no es obligatoria, si es recomendable si posteriormente utilizas instrucciones como esta:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Estimado jrlbotella :
En este link se muestran otras alternativas. Yo utilizo en mis programas el código que se muestra en el hilo #10, con exelentes resultados, que se pueden comprobar en el Administrador de tareas. Saludos |
#5
|
||||
|
||||
El truco que comenta [radenf], tal y como explica Ian Martins aquí es "obligar" al sistema a liberar la memoria que tu programa tiene en ese estado "marcada para liberar" que he comentado antes.
El problema es que hay quien piensa que eso puede no ser todo lo beneficioso que a priori parece. Es decir, de alguna forma le estamos diciendo al sistema (obligándole) que queremos que liberar la memoria de nuestro proceso, cuando el sistema tiene su propio sistema de liberación. En cierta manera estamos interfiriendo en el correcto(normal) funcionamiento de este proceso. ¿Y si el sistema piensa que es mejor liberar la memoria de otro proceso, en lugar del nuestro? ¿Y si el sistema puede coger memoria de otro lugar sin necesidad de liberarla ahora (de nuestro proceso o de ningún otro)? ¿Y si el sistema piensa que ahora no es el momento de liberar? ¿...? Lo que quiero decir es que no va a pasar nada por hacerlo, pero a lo mejor en algunos casos lanzar este proceso cada X tiempo, puede empeorar el rendimiento en lugar de mejorarlo (link -si buscas encontarás otros similares-).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
||||
|
||||
El "método Marteens" lo he usado desde siempre ¿1998? y con muy buenos resultados.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#7
|
||||
|
||||
Yo lo utilizo en mi programa para visualizar imágenes médicas en formato Dicom, que eleva el uso de la Ram en mas de 1Gb cada vez que cargo un nuevo examen (500-1500 Imágenes) y funciona a la perfección. Si no lo utilizo al cargar el segundo o tercer examen recibo el fatídico mensaje de que no dispongo de memoria suficiente.
Salu2 |
#8
|
||||
|
||||
En mi opinión, los tres últimos mensajes (Neftalí, Casimiro y radenf) llevan razón.
El método de Marteens no tiene porqué fallar, como dice Casimiro, pero sí puede hacer la aplicación un poquillo menos eficiente (aunque en muchas ocasiones sea casi imperceptible) pues, como dice Neftalí, el sistema puede tener un mejor momento para hacer su trabajo (podemos pedirle al intendente que limpie nuestro lugar cada vez que derramamos un poco de café pero no es realmente necesario y el intendente hará mejor su trabajo si no lo interrumpimos a cada momento). Pero habrá situaciones como las que describe radenf en que el uso de memoria es tan demandante que sea preferible limpiar cuanto antes (por ejemplo, si se nos cae toda la taza de café, seguramente convendrá llamar al intendente de inmediato). // Saludos |
#9
|
||||
|
||||
La mejor forma de liberar la memoria utilizada por un formulario es hacerlo en el evento OnClose. Asignas la acción de cerrar a caFree. De esta forma el formulario se liberará automáticamente y evitas estarlo liberando en cada código donde lo utilices. Por ejemplo:
Con lo anterior, tu código se simplicaría:
|
#10
|
||||
|
||||
Cita:
Para eso existen otras opciones como caHide. En esos casos no puedes liberarlo de esa forma, así que yo no diría que es la "mejor". Simplemente es la adecuada para unas situaciones y no es adecuada para otras.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#11
|
||||
|
||||
Bueno, hablando de simplificaciones al usar formularios, yo prefiero escribir:
El secreto es cambiar la declaración: por:
TghForm, que deriva de TForm, es una de las clases de GH Freebrary. Un saludo. Al González. |
#12
|
||||
|
||||
Cita:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Liberar el DataModule | Cañones | OOP | 5 | 13-10-2010 13:40:17 |
Liberar DLL | acertij022 | Varios | 1 | 26-06-2008 17:38:05 |
TSHFileInfo, se ha de liberar? | [Gunman] | API de Windows | 4 | 28-11-2005 22:14:36 |
Liberar Objetos II | OscarG | OOP | 12 | 11-10-2005 11:13:55 |
Liberar un objeto | xerkan | Servers | 1 | 28-10-2003 18:29:10 |
|