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 21-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
como aumenta la memoria asignada a delphi

no se si esta bien dicho, pero cada 2x3 me da error de memoria o pila desbordada y tal, supongo q es por haber ejecutado varias veces mi programa y se queda sin memoria, aunq no deberia ser asi, pero bueno alguien sabe como se sube la memoria asignada a pila y demas cosas??
Responder Con Cita
  #2  
Antiguo 21-12-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola djanp,
Asegúrate de que estás liberando la memoria de todo objeto que creas.
Y si estás usando estructuras dinámicas en las que se empleen punteros. Por ejemplo:

Código Delphi [-]
PNodo = ^TNodo;
TNodo = record
   Valor: integer;
   Sig: PNodo;
end;

Recuerda que tu debes realizar Dispose. Por cada New que hayas realizado, un Dispose debe ser efectuado cuando ya no se necesita.

Delphi libera la memoria que emplea. Ese es el comportamiento predeterminado... Pero si haz estado creando objetos y no le haz estado asignando un "dueño" para que éste se encargue de liberarlo de la memoria, la obligación recae en ti en ir liberandolos.

Por empezar se me ocurre que empieces a analizar si algo queda por ahi sin liberar.
A falta de muestra de código no te sabría decir que y/o donde está fallando.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 21-12-2007 a las 13:20:44.
Responder Con Cita
  #3  
Antiguo 21-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
cierto q no he liberado memoria de lo que creo, algo q tendre q ir añadiendo, pero no uso punteros, solo forms con sus botoncitos y tal
tal vez se quede en memoria las 30 tablas q abro y no se borre al cerrar la aplicacion
Responder Con Cita
  #4  
Antiguo 21-12-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
¿Concretamente que es lo que estás creando?
¿Por tablas te refieres a TTables?

Si por las tablas y/o cualquier otro componente que se emplee para el acceso a base de datos no creo que sea el problema. Tengo entendido, corrijanme si me equivoco, que Delphi una vez que se cierra la aplición se cierran todas las secciones que hayan abiertas, por lo que se cierran todas las tablas, las Querys, los dataset, etc...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 21-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
si a ttables , datasources y demas me refiero,
tal vez sea q tengo q hacer en cada form.:

procedure TFclientes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;



pero si cierro la aplicacion de golpe no haria falta hacer esto no??
Responder Con Cita
  #6  
Antiguo 21-12-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
djanp,
Close no libera a menos que lo indiques. Para ello es el valor caFree. Por defecto es caHide (en SDI). Por lo que cuando tu presionas en la X, a menos que cambies el valor a caFree lo único que hará es ocultarse la forma y todo lo que ésta contenga seguirá estando en memoria.

Si estas creando objetos en runtime conviene forzar la liberación de memoria. Delphi libera la memoria disponible cuando se cierra la aplicación... y eso funcionará siempre que todo lo que creas tiene dueño. Si no lo tiene... tu mismo deberás programar cuando liberarlo.

El hecho de que tengas caFree no te garantiza que toda la memoria se liberará.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 21-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Dicho de otra Forma:

Si tienes puesto caFree en el FormClose, dicho form se libera de memoria RAM, y todos los componentes que sea dueño.

Si los TTables los tienes puestos en ese Form en tiempo de diseño, también se liberan al cerrar el Form.

Si en tu código haces: tabla1 := TTable.Create(nil); ese no se libera, tienes que liberarlo tú con tabla1.Free;

Si en tu código usas: tabla1 := TTable.Create(Self); o bien tabla1 := TTable.Create(FClientes); entonces sí se libera automáticamente.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 21-12-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por djanp Ver Mensaje
no se si esta bien dicho, pero cada 2x3 me da error de memoria o pila desbordada y tal, supongo q es por haber ejecutado varias veces mi programa y se queda sin memoria, aunq no deberia ser asi, pero bueno alguien sabe como se sube la memoria asignada a pila y demas cosas??
Si el error es de pila desbordada (stack overflow) y no de No hay memoria disponible (Memory not available), muy probablemente el problema está en una llamada recursiva, directa o indirecta, que está ejecutándose muchísimas veces.

En turbo pascal, podías cambiar el tamaño de la pila con la directiva {$M StackSize, MinHeapSize, MaxHeapSize} del compilador. Nunca he tenido necesidad de hacer esto en Delphi (10 años usándolo) por lo que ignoro si el compilador soporta la directiva.

Como ya he dicho... lo mas seguro es que haya una llamada recursiva infinita.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 22-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por jachguate
Nunca he tenido necesidad de hacer esto en Delphi (10 años usándolo) por lo que ignoro si el compilador soporta la directiva.
En projects -> options está la cajita para indicar el tamaño de pila (call Stack).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
La falta de sueño aumenta los peligros para el corazón Delphius La Taberna 8 27-06-2007 09:24:34
GMail aumenta el espacio a 2 GB marcoszorrilla Noticias 3 02-04-2005 18:11:48
gestion de memoria delphi joni Varios 1 17-03-2005 21:03:36
manejo de la memoria en delphi jac000y Varios 7 03-02-2004 15:03:28
Como saber que letra tiene asignada la unidad de CD pampitasnowman Varios 1 22-09-2003 19:29:14


La franja horaria es GMT +2. Ahora son las 16:52:14.


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