Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sin Recursos del sistema (https://www.clubdelphi.com/foros/showthread.php?t=67725)

JosepGA 03-05-2010 11:57:06

Sin Recursos del sistema
 
Hola a todos,

pues os planteo mi problema, en algunos equipos y no siempre, me aparece el error de "sin recursos de sistema", y ocurre después de llamar a una Dll varias veces seguidas.

Dentro de esta dll creo formularios y los libero con "Free", hay funciones recursivas y una gran relación de tablas con DataSetProvider y clientDataSets.

El error no aparece siempre, de hecho en mi equipo nunca. Pero un cliente dice que al entrar unas cinco veces le acaba apareciendo el error. Yo lo he podido reproducir en un equipo con poca RAM y me aparece, alguna vez, no siempre, a las once veces que la ejecuto.

Cuando acaba la ejecución de la Dll, aparece una ventana informando del nº de documento que se ha generado, y después se sale de la Dll. Pero cuando ocurre el error, sale igualmente el mensaje del documento y por detrás el error de "sin recursos de sistema", si el cliente no lo ve, se piensa que la aplicación esta colgada, si se ve el mensaje, se pulsa aceptar y después deja pulsar en mi ventana del mensaje del nº de documento, pudiendo salir normalmente y volver al menú principal.

La dll la cargo en el momento de usarla y la libero al salir, para ahorrar memoria.

¿ Alguien se ha encontrado con un problema similar ? ¿ Que puedo hacer para ahorrar recursos ? ¿ Tengo alguna forma de asegurar que cuando se sale de la Dll se libere todo ?

Un saludo

duilioisola 03-05-2010 15:01:33

Pregunta: ¿Tienes los fuentes de la DLL?

- Si es así, deberías ver si para hacer lo que necesita está seleccionando de una tabla todos los registro o solo algunos.
- También deberías asegurarte de cerrar todos los DataSet antes de salir.
- Si tiene funciones recursivas, deberías ver si crean cosas que luego no liberen.

También podrías poner en pruebas un pequeño Label que te dijera cuanta memoria tienes y que actualicez cada 5 segundos (o 1 seg. o 10 seg. o lo que sea)

Luego has la prueba de abrir y cerrar la DLL sin hacer nada varias veces y mira como evoluciona la memoria.

Finalmente mira como evoluciona la memoria si ejecutas el código de la dll varias veces seguidas.

JosepGA 04-05-2010 09:10:37

hola,

gracias por tus sujerencias, en ello estaba, plantee la cuestión por si alguien habia encontrado algún otro problema que pudiera causar quedarse sin recursos. Si encuentro el problema lo publicare.

Un saludo

JosepGA 04-05-2010 17:08:00

hola,

pues después de verificar que al salir de la dll baja la memoria virtual (he usado el componente de las JEDI para obtener los valores de memoria), he controlado que todas las tablas se cierran, que las listas se liberan, etc... Aun así sigue bajando. Después he puesto dentro de la dll que no se ejecute nada, y aunque solo entra y sale de la dll, tambien me consume un poco de memoria virtual (menos que antes pero sigue bajando).

Cuando vuelves a entrar una segunda vez en la dll, la memoria inicial de la segunda prueba es la memoria final de la primera prueba.

Asi que ahora estoy mirando si hay algun problema en liberar de memoria una Dll, yo lo hago con FreeLibrary pero no se si es o no correcto (hasta ahora creia que sí).

Un saludo


La franja horaria es GMT +2. Ahora son las 16:53:30.

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