PDA

Ver la Versión Completa : Gestión de Memoria


ogorut
09-05-2003, 10:08:23
Hola a todos.
Estoy creando una aplicación bastante grande y el problema me surge porque hay equipos que cuando estan trabajando con la aplicación se quedan sin memoria y el equipo se queda colgado.

Para cerrar un formulario de mi aplicacion hago lo siguiente:

en el evento OnClose tengo un Free.
y en el OnDestroy un Cancel de las tablas que uso en ese Form.

No se si hay algo mal o hay otro metodo mejor para liberar memoria.

Gracias.

__marcsc
09-05-2003, 10:23:48
Hola,

en el OnClose quizás deberías poner

Action:= caFree;

y más que un Cancel (que cancela las moificaciones en el registro actual) deberías hacer un Close, que cierra la tabla, no?

Saludos.

delphi.com.ar
09-05-2003, 17:26:11
Te cuento que tu problema es muy habitual en los sistemas grandes, y normalmente se debe al exceso de uso de DataSets. Digamos en una pantalla donde se cargan 40 campos de una tabla, posiblemente 20 de estos estén relacionados a otras tablas, y para simplificar la tarea de selección utilizamos comobos con acceso a datos. Una solución que he improvisado, es para los estos campos cuyas relaciones son a tablas “pequeñas” (normalmente menores a una página de datos), cargar estos datos directamente en la memoria, que aunque no lo creas, el uso es menor. Los Querys bidireccionales abusan demasiado de la memoria, por eso cuando no sea necesario, utilizá querys unidireccionales. Otro tema es no hacer abuso de los datamodules, y poner en ellos, que normalmente están creados desde que inicia la aplicación, solo los elemento que serán compartidos por toda la aplicación, y las cosas propias de cada formulario, alojarlas en el formulario. También los recursos que son comunes entre los formulario, por ejemplo los íconos de los toolbars o los logos de la empresa, ay que ponerlos en un solo lado y que todos los forms accedan a ellos.
Otro tema que he leído en este foro, es que muchos programadores dejan que los formularios y reportes en modo “auto create”, o sea que cuando arranca la aplicación, es cargada en su totalidad en la memoria, bueno eso me parece pésimo, sin ánimos de ofender a nadie, pero creo que hay que crearlos cuando se necesiten, a no ser que se requiera mucha velocidad de acceso.
Como último, te recomiendo leer esta página http://www.marteens.com/trick42.htm

Espero haber sido claro…