![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
liberar memoria con dispose
Holas
Tengo un Ttreeview en el que tengo una pequeña estructura de datos en cada nodo de ultimo nivel TtreeNode.data (con level = 3), tengo una funcion recursiva que llena el treeview y otra funcion recursivo que libera cada de los nodos de ultimo nivel del treeview con dispose, ahora como el arbolito es extenso, esta funcion se esta demorando demasiado en liberar memoria. Dicha funcion, llamada FreeNodes se llama en el formclose, y es ahi donde se demora. sin embago he notado que si no cierro el formulario donde esta el treeview y cierro el formulario principal, la aplicacion se cierra sin poblemas y rapidamente, mi pregunta es: estara delphi borrando correctamente la memoria asignada con new cuando cierro el aplicativo?
__________________
nuestro carácter está reflejado en cada línea de código que escribimos. |
#2
|
|||
|
|||
Hola...
¿Podrías poner parte de tu código? Por que eso de que estés creando los nodos con New y liberándolos con Dispose como que no me suena bien. ¿Será que estás usando la propiedad Data de la clase TTreeNode para guardar información y es esa información de tipo puntero? Saludos... |
#3
|
||||
|
||||
no, los nodos no los creo con new, creo con new la estructura de tipo PRecNode de tipo puntero que apunta a un
esta estructura las guardo en el campo data los nodos de ultimo nivel nodo.data
__________________
nuestro carácter está reflejado en cada línea de código que escribimos. |
#4
|
||||
|
||||
__________________
nuestro carácter está reflejado en cada línea de código que escribimos. |
#5
|
|||
|
|||
Hola...
No veo gran problema en como asignas y liberas la memoria. Lo que si, si cierras la aplicación sin cerrar la ventana que contiene el Treeview y esta ventana no tiene un evento OnClose que llame al método FreeNodes, entonces esa memoria no se libera, lo que provoca que tu aplicación tenga un llamada "memory leak". Ahora, te recomendaría que tu procedimiento liberar memoria lo reescribas así:
El método anterior está basado en la suposición que solo el nivel 3 tiene asignada la propiedad Data. La llamada sería: FreeNodes(TreeView1.Root); Toma en cuenta que estoy haciendo este método sin probarlo, así que podría tener algún error... Saludos... |
#6
|
||||
|
||||
Gracias Maeyanes
En realidad los otros niveles si tienen el nodo.data asignado pero a un entero nodo.data := integer(iCliente) por eso la funcion mejorada de liberacion de nodos quedo asi
la liberacion de memoria sigue estando lenta pero lo solucione impidiendo que cierre el formulario. Cuando se cierre el aplicativo (cosa que si se hace rapidamente) supongo que windows eliminara automaticamente todos los punteros creados por el aplicativo... o opor los menos eso espero
__________________
nuestro carácter está reflejado en cada línea de código que escribimos. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Liberar memoria | Perrero80 | Varios | 15 | 06-04-2017 04:07:10 |
Liberar memoria | vicvil | Varios | 13 | 30-10-2006 17:14:38 |
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 |
![]() |
|