Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-07-2003
susje susje is offline
Miembro
 
Registrado: jul 2003
Posts: 11
Poder: 0
susje Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 31-07-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
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).
Responder Con Cita
  #3  
Antiguo 31-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #4  
Antiguo 31-07-2003
susje susje is offline
Miembro
 
Registrado: jul 2003
Posts: 11
Poder: 0
susje Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:56:12.


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
Copyright 1996-2007 Club Delphi