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=2646)

susje 31-07-2003 18:26:26

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

guillotmarc 31-07-2003 21:02:13

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.

roman 31-07-2003 22:12:39

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

susje 31-07-2003 23:18:18

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


La franja horaria es GMT +2. Ahora son las 05:24:23.

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