PDA

Ver la Versión Completa : Problemas con la memoria de windows


escullar
07-07-2005, 18:59:44
Hola a todos/as

Tengo una aplicacion desarrollada en delphi 5 que llegado a un determinado punto y debido al exceso de formularios me consume mucha memoria y he probado a poner cafree,release,free. El problema es que el tiempo que tarda en liberar realizar la comprobacion el windos para liberarla a veces excede y ya es demasiado tarde.

¿Existe alguna forma de decirle al windows que libere la memoria en el instante actual? (esto me solucionaria el problema)

Muchas gracias y un saludo

marcoszorrilla
07-07-2005, 19:01:20
Una pregunta, no tendrás todos los furmularios en "autocreate", en vez de available e irlos creando cuando sea necesario y destruyéndolos al cerrarlos?

Un Saludo.

dec
07-07-2005, 21:04:57
Hola,

Hay un componente en Torry's Delphi Pages (http://www.torry.net/) de nombre MaxMem (http://www.torry.net/quicksearchd.php?&String=maxmem&Title=Yes) que "desfragmenta" la memoria RAM mediante un algoritmo en ensamblador: es gratuito y de código abierto.

No sé si es exactamente algo así lo que precisas: diría que no, puesto que esos consumos excesivos de memoria deberían tal vez solucionarse de otra forma, pero, en todo caso, por si te es útil, ahí queda referido.

lucasarts_18
08-07-2005, 03:48:51
Hola escullar:

He leído otros post que a muchas personas les ha sucedido alguna vez, y la mayoría de esos problemas surgían porque quedaban los query o las tables abierto/a, deberías chequear tambien esa posiblidad.

Saludos.

mamcx
08-07-2005, 04:55:18
Antes de ponerte a aplicar soluciones, conoce la pregunta.

Debes determinar EXACTAMENTE que es lo que vas a arreglar...

Basicamente:

En las propiedades del proyecto excluye a todos los formularios que no deben iniciar automaticamente (los que si deben son el formulario principal y los datamodules).

Donde hagas las llamadas a los formularios, los creas manualmente

Asegurate que cierras todos los recuersos externos (ej: Conexiones a bases de datos, accesos a archivos, etc... TODO lo que esta FUERA del codigo de la aplicacion) esto es 100% aplicable incluso para entornos con recolector de memoria...

El resto de los problemas que tengas los solucionas:

1- Con un profiler, como MemProof o AQTime

2- Para aplicaciones con gran demanda de memoria y que deben escalar a multiples procesadores, con un administrador de memoria alternativo como FastMM4.

Pero fundamentalmente, con buenas practicas de codificacion:

1- Escribir codigo claro
2- Separar funciones: Independizar acceso a datos de GUI de logica
3- Centralizar funcionalidad comun
4- Tener disciplina en la creacion de objetos...

escullar
08-07-2005, 09:09:15
Hola a todos y muchas gracias por contestar.

El problema es que yo creo los formularios y conforme voy aumentando su numero por otro lado voy liberando.

El caso es que cuando uno libera memoria el windows no actua inmediatamente sino que se toma su tiempo y dado un intervalo de tiempo realiza la comprobacion para liberar la memoria. Esto es lo que me ocasiona el problema ya que pasado este tiempo cuando windows hace la comproabación ya es demasiado tarde pues la maquina esta sin recursos y digamos que "explota".

Mi intencion es la de decirle a windows que compruebe la memoria a liberar antes de que realice antes la comprobacion por su cuenta. De esta manera controlo los formularios destruidos y liberados y cuando lo crea oportuno decirle a windows "Libera memoria".

Un saludo.

Lepe
08-07-2005, 12:47:04
Buscando en el foro por "libera memoria" se llega a este hilo http://www.clubdelphi.com/foros/showthread.php?t=22814&highlight=Libera+memoria
donde se hace referencia al truco de Ians Marteens.

Un saludo

escullar
08-07-2005, 14:42:47
Voy a relizar una pequeña prueba pero la verdad es que tiene buena pinta.

Muchas gracias y un saludo.