elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 05:26  


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderador: [D4N93R])
| | | |-+  Memoria insuficiente al trabajar con bmp
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Memoria insuficiente al trabajar con bmp  (Leído 385 veces)
arenoide

Desconectado Desconectado

Mensajes: 150



Ver Perfil
Memoria insuficiente al trabajar con bmp
« en: 4 Octubre 2011, 00:32 »

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


En línea
Keyen Night


Desconectado Desconectado

Mensajes: 315


Nothing


Ver Perfil
Re: Memoria insuficiente al trabajar con bmp
« Respuesta #1 en: 4 Octubre 2011, 04:50 »

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
        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
        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.



« Última modificación: 4 Octubre 2011, 04:54 por Keyen Night » En línea

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

[Aporte] Factorización Relativamente Rápida
arenoide

Desconectado Desconectado

Mensajes: 150



Ver Perfil
Re: Memoria insuficiente al trabajar con bmp
« Respuesta #2 en: 4 Octubre 2011, 13:07 »

Muchas Gracias Keyen Night

Acabo de quitar el GC.collect y poner antes el Dispose y ya va en los dos ordenadores perfecto.  ;D
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines