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
Hola a todos,
Tras Mirar muchos Post referente al Asunto, sigo teniendo el mismo problema (no veo que los objetos TQUERY que creo liberen memoria). ¿Alguien me puede explicar por qué al recorrerme el objeto Tquery la memoria virtual aumenta y cuando lo libero no disminuye nada la memoria? ¿Como tengo que crearme el objeto para liberar con .free? ¿Como parent o como owner?. Ah!,la BB.DD a la que accedo está en Interbase 3 y tiene millones de registro y como que no está muy indexada. Saludos y Gracias |
#2
|
||||
|
||||
Hola.
Mira este truco de Marteens. http://www.marteens.com/trick42.htm Si liberas correctamente los TQuery y aún así no recuperas la memória, probablemente es el mismo Windows el que no es capaz de recuperarla. Esta llamada al API fuerza a la recuperación de la memória liberada. Programa un llamada a la función tras liberar los TQuery. El tamaño de la Base de Datos y que no esté indexada es un problema de que te va a consumir más memória y tardar mucho más en ejecutarse la consulta en el proceso del servidor de Interbase. Pero no tiene nada que ver con la memória que consuma tu programa Delphi. En principio un TQuery que hayas creado en tiempo de diseño, no hay que liberarlo con un .Free, puesto que cuando liberes el formulario al que pertenece (con un .Release) se ejecutará un .Free sobre todos sus componentes que liberará la memória asignada al TQuery. Otra cosa es un TQuery que hayas creado en tiempo de ejecución (es decir por código), en cuyo caso o lo liberas manualmente con un .Free, o le asignas su propiedad Owner al formulario para que se ocupe el formulario de liberarlo. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
||||
|
||||
Quizá me equivoque pero me parece que Delphi tiene su propio manejador de memoria de manera que al liberar un objeto no necesariamente se ve un aumento en la memoria del sistema sino hasta que terminamos la aplicación.
// Saludos |
#4
|
|||
|
|||
Si que utilizo el truco de Marteens, lo que ocurre que cuando se ejecuta la llamada al procedimiento si que baja la memoria virtual de la maquina, pero automaticamente vuelve a subir considerablemente.
Los controles los creo en tiempo de ejecucion y los libero con .free. Saludos |
|
|
|