Memoria no recuperada al cerrar formularios en NETCF

11/11/2009 - 10:10 por Francisco Rodríguez | Informe spam
Hola.

He buscado tanta información como me ha sido posible, pero no encuentro una
solución al problema. Tengo una pequeña aplicación hecha con C# (VS 2005,
NETCF 2.0 SP1), y el caso es que cada vez que abro un formulario, se va
"comiendo" una pequeña cantidad de memoria (unos 100 - 200 KB) que no se
libera al cerrarlo. Cuanto mayor uso, llega un punto en que no queda memoria
libre y se produce el error fatal (OutOfMemoryException).

He probado de todo: Dispose después de ShowDialog, poner a null los objetos
o conexiones no usadas en el evento Closing del formulario llamado, invocar
al método GC.Collect (esto último ya a la desesperada, pues dicen que no es
recomendable). Pero no hay manera.

Si alguien ha tenido el mismo problema o me puede indicar algún enlace con
posibles soluciones, se agradece.

Un saludo.

Preguntas similare

Leer las respuestas

#1 RFOG
11/11/2009 - 10:22 | Informe spam
¿Creas ese form cada vez que lo abres?

On Wed, 11 Nov 2009 10:10:38 +0100, Francisco Rodríguez
wrote:

Hola.

He buscado tanta información como me ha sido posible, pero no encuentro
una solución al problema. Tengo una pequeña aplicación hecha con C# (VS
2005, NETCF 2.0 SP1), y el caso es que cada vez que abro un formulario,
se va "comiendo" una pequeña cantidad de memoria (unos 100 - 200 KB) que
no se libera al cerrarlo. Cuanto mayor uso, llega un punto en que no
queda memoria libre y se produce el error fatal (OutOfMemoryException).

He probado de todo: Dispose después de ShowDialog, poner a null los
objetos o conexiones no usadas en el evento Closing del formulario
llamado, invocar al método GC.Collect (esto último ya a la desesperada,
pues dicen que no es recomendable). Pero no hay manera.

Si alguien ha tenido el mismo problema o me puede indicar algún enlace
con posibles soluciones, se agradece.

Un saludo.




Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
En el amor es lo mismo que en la guerra; plaza que parlamenta está medio
conquistada.
Respuesta Responder a este mensaje
#2 Francisco Rodríguez
11/11/2009 - 10:50 | Informe spam
Sí, se crea cada vez que se utiliza. Por eso no me cuadra.

Aclaro que la "medición" de la memoria que se pierde la hago refrescando en
pantalla los indicadores de una aplicación de control remoto (EveryWAN
Remote), que me imagino que tomará los valores de la memoria del dispositivo
mediante RAPI (hay métodos más pulcros de hacerlo, lo sé).



"RFOG" escribió en el mensaje de
noticias:
¿Creas ese form cada vez que lo abres?

On Wed, 11 Nov 2009 10:10:38 +0100, Francisco Rodríguez
wrote:

Hola.

He buscado tanta información como me ha sido posible, pero no encuentro
una solución al problema. Tengo una pequeña aplicación hecha con C# (VS
2005, NETCF 2.0 SP1), y el caso es que cada vez que abro un formulario,
se va "comiendo" una pequeña cantidad de memoria (unos 100 - 200 KB) que
no se libera al cerrarlo. Cuanto mayor uso, llega un punto en que no
queda memoria libre y se produce el error fatal (OutOfMemoryException).

He probado de todo: Dispose después de ShowDialog, poner a null los
objetos o conexiones no usadas en el evento Closing del formulario
llamado, invocar al método GC.Collect (esto último ya a la desesperada,
pues dicen que no es recomendable). Pero no hay manera.

Si alguien ha tenido el mismo problema o me puede indicar algún enlace
con posibles soluciones, se agradece.

Un saludo.




Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
> En el amor es lo mismo que en la guerra; plaza que parlamenta está medio
conquistada.
Respuesta Responder a este mensaje
#3 RFOG
11/11/2009 - 11:47 | Informe spam
Es conocido que el .NET, sobre todo el Compact, tiene fugas de memoria (o
las tenía), de hecho hay por ahí una herramienta para tracearlas, lo que
no me acuerdo es cómo se llama.

De todos modos, prueba a no crearla/destruirla, simplemente la
ocultas/muestras, a ver si así no tienes las fugas. Otra cosa es que si
estás haciendo interop con código nativo, y ese código asigna memoria,
tendrás que liberarla tu a mano usando el api correspondiente. Quizás la
fuga esté ahí.

Hace unos días en CodeCamp se dio una charla sobre depuración avanzada en
.NET... Yo llegué tarde porque se me olvidó -qué extraño-, pero por lo
poco que vi el chaval que la hizo controla, y muuuuuuuuuuuuuuuuucho, sobre
el tema. Quizás se habló sobre cómo mirar tu problema.

On Wed, 11 Nov 2009 10:50:52 +0100, Francisco Rodríguez
wrote:

Sí, se crea cada vez que se utiliza. Por eso no me cuadra.

Aclaro que la "medición" de la memoria que se pierde la hago refrescando
en pantalla los indicadores de una aplicación de control remoto
(EveryWAN Remote), que me imagino que tomará los valores de la memoria
del dispositivo mediante RAPI (hay métodos más pulcros de hacerlo, lo
sé).



"RFOG" escribió en el mensaje de
noticias:
¿Creas ese form cada vez que lo abres?

On Wed, 11 Nov 2009 10:10:38 +0100, Francisco Rodríguez
wrote:





<snip>


>> En el amor es lo mismo que en la guerra; plaza que parlamenta está
medio conquistada.







Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
En el amor es lo mismo que en la guerra; plaza que parlamenta está medio
conquistada.
Respuesta Responder a este mensaje
#4 Francisco Rodríguez
11/11/2009 - 12:09 | Informe spam
De acuerdo. Seguiremos investigando, gracias.

Un saludo.


"RFOG" escribió en el mensaje de
noticias:
Es conocido que el .NET, sobre todo el Compact, tiene fugas de memoria (o
las tenía), de hecho hay por ahí una herramienta para tracearlas, lo que
no me acuerdo es cómo se llama.

De todos modos, prueba a no crearla/destruirla, simplemente la
ocultas/muestras, a ver si así no tienes las fugas. Otra cosa es que si
estás haciendo interop con código nativo, y ese código asigna memoria,
tendrás que liberarla tu a mano usando el api correspondiente. Quizás la
fuga esté ahí.

Hace unos días en CodeCamp se dio una charla sobre depuración avanzada en
.NET... Yo llegué tarde porque se me olvidó -qué extraño-, pero por lo
poco que vi el chaval que la hizo controla, y muuuuuuuuuuuuuuuuucho, sobre
el tema. Quizás se habló sobre cómo mirar tu problema.


>>> En el amor es lo mismo que en la guerra; plaza que parlamenta está
medio conquistada.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida