Memoria insuficiente al trabajar con bmp

Iniciado por arenoide, 4 Octubre 2011, 00:32 AM

0 Miembros y 1 Visitante están viendo este tema.

arenoide

Hola,
En un programa que estoy haciendo, éste accede a una función que devuelve un bitmap. Accede del orden de 10 veces por segundo. Lo que hago es cada vez que lo llamo, invoco despues al System.GC.Collect() para que no haya problemas de memoria. El polktergeist es que en mi ordenador va de maravilla, el Colector funciona de lujo, pero en cambio en el ordenador de mi colega la memoria usada empieza a subir y a subir hasta que acaba dando un pete por memoria insuficiente.

¿Por qué puede ser que en mi ordenador vaya bien y en el de mi colega parezca como que no funciona el colector?

Gracias de antemano

Keyen Night

#1
Usar el GC de .Net de manera manual no es malo pero si es considerado de mala práctica, mejor asegurate de llamar a .Dispose del Bitmap antes de volver a cargarlo, me explico:

Esto no se debe hacer:
Código (vb.net) [Seleccionar]
       Dim x As New Bitmap("C:\Ejemplo.png")
       Do While True
           x = Bitmap.FromFile("C:\Ejemplo.png")
       Loop


No tiene nada de malo el bucle infinito sino que nunca se destruye el objeto antes de volverlo a crear, una y otra vez se crea un objeto nuevo que a pesar de que lo estás creando en la misma variable, se está guardando en otra dirección en memoria y eso causa el error, en cambio así con el mismo bucle infinito, no pasa nada:

Código (vb.net) [Seleccionar]
       Dim x As New Bitmap("C:\Ejemplo.png")
       Do While True
           x = Bitmap.FromFile("C:\Ejemplo.png")
           'Aqui se puede trabajar con el Bitmap'
           x.Dispose()
       Loop


Puedes observar el Uso de memoria en los 2 casos, en el primero sube hasta dar error y en el segundo caso sube hasta que se dispara el GC automáticamente y baja el consumo, porque ya ha sido marcado el objeto como Dispose.

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

arenoide

Muchas Gracias Keyen Night

Acabo de quitar el GC.collect y poner antes el Dispose y ya va en los dos ordenadores perfecto.  ;D