PDA

Ver la Versión Completa : EOutOfResources


Sick boy
20-10-2006, 12:48:32
Hola,

Tengo un mensaje de error del tipo EOutOfResources

Solo aparece algunas veces, de forma aleatoria, y en algunos PCs.
La verdad es que el PC tiene recursos más que de sobra, y en el momento del error el uso de memoria esta al 50% o menos.

Es muy dificil de trazar, ya que es un error aleatorio, de mil veces que lo intento puede ser que salga una. Ademas, pulso en aceptar, y no afecta al funcionamiento del programa.

Alguien sabe algo sobre este error??
Algún componente que sea propicio a este mensaje??

En el momento que sucede se realizan muchas operaciones, desde liberar una ventana modal, hasta varias sentencias en SQL, imprimir, abrir un cajón, etc...

Se agradece cualquier idea o sugerencia.

maeyanes
20-10-2006, 15:41:51
A lo mejor estás creando objetos los cuales después no destruyes adecuadamente.

Podrías empezar por verificar eso...



Saludos...

Sick boy
20-10-2006, 15:59:45
Lo miraré, pero me temo que eso no es muy lógico, ya que entonces pasaría en todos los ordenadores, y todas las veces que se intentase.

Insisto en que es aleatorio, no ha habido un consumo de recursos (no se llega ni al 50%) y además no para la ejecución del proceso, ya que todo el proceso se hace y finaliza correctamente.

Visto de esta manera, es un problema que no es un problema (ya que no provoca ningún error de funcionamiento), salvo la molestia de tener que ver el mensaje y cerrar la ventanita.
De todos modos, no me gusta dejar cosas al azar, más que nada por lo de la ley de murphy.

Voy a seguir destripando, a ver si encuentro algo, pero agradeceria todas las sugerencias.

saludos

seoane
20-10-2006, 16:14:54
No siempre el limite lo marca la memoria, el sistema solo puede mantener abiertos un numero de handles limitados. En este otro hilo (http://www.clubdelphi.com/foros/showthread.php?t=36585) se trato un tema parecido, se abrían handles y no se cerraban hasta que el sistema sin previo aviso decía basta. Comprueba que no estés utilizando algo que abra handles y que luego no los cierres, por ejemplo CreateFile (Puerto serie), GetDc, etc.

Sick boy
20-10-2006, 16:25:51
Ok, gracias por el aviso de los handles, en realidad, activando algunas opciones si que se abren handles. Ahora voy a revisar si se cierran correctamente.

Lo extraño es que el sistema no dice basta, solo da el error y continua, sin más.

Después de dar el error vuelves a ejecutar el mismo proceso y funciona bien!!!

Raro, verdad??

Sick boy
20-10-2006, 17:33:14
Vale, estoy acotando las posibilidades, y ya se mas o menos en que parte se produce el error.

Puede ser justo al liberar la ventana, la cual creo y destruyo asi:

form:=Tform.create(self);
form.showmodal;
form.release;

He leido en alguna parte que también hay que hacer form:=nil, yo no lo hago, y hasta ahora todo ha ido bien.

También hay un par de Tstringlist que se liberan antes del close del form, pero creo que se liberan correctamente. Por si era eso las he sacado a una unit global que tengo para compartir variables, asi solo las creo y las destruyo una vez durante la vida del programa.

Yo, por más que pruebo núnca he conseguido obtener el error, pero me consta que aparece algunas veces.

Sobre los handles, una vez acotado el error, los handles estan fuera, y además se liberan bien.

Voy a compilar y lo llevo a un ordenador, donde se que en menos de una semana sale el error, a ver que pasa.

Mientras tanto, aprecio las sugerencias.

seoane
20-10-2006, 18:17:17
Solo una pregunta: ¿Por que usas Release y no Free, o Freeandnil? Es decir, algo así.


with TForm.create(self) do
try
ShowModal;
finally
Free;
end;


Es solo por curiosidad, no digo que un método sea mejor que otro, al fin y al cabo con Release terminas llamando al Free.

Sick boy
23-10-2006, 10:20:06
Pues si te digo la verdad, no lo se.
Es por la costumbre, hace años cuando empece a crear y destruir ventanas busque información, y en alguna parte vi que recomendaban usar release.

Supongo que alguna diferencia hay, pero no la recuerdo.

Lo que si que esta claro es que FreeAndNil ademas de liberar el objeto asigna al puntero nil, que es lo que comentaba en un mensaje anterior. No estoy seguro de que esto sea necesario.

Voy a investigar un poco, pero seguro que hay gente que controla más que yo y que nos puede dar una explicación.

saludos