elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  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 3,759 veces)
arenoide

Desconectado Desconectado

Mensajes: 167



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

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: 496


Nothing


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

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
  1.        Dim x As New Bitmap("C:\Ejemplo.png")
  2.        Do While True
  3.            x = Bitmap.FromFile("C:\Ejemplo.png")
  4.        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
  1.        Dim x As New Bitmap("C:\Ejemplo.png")
  2.        Do While True
  3.            x = Bitmap.FromFile("C:\Ejemplo.png")
  4.            'Aqui se puede trabajar con el Bitmap'
  5.            x.Dispose()
  6.        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 am por Keyen Night » En línea

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

Desconectado Desconectado

Mensajes: 167



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

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:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
memoria insuficiente para juego
Juegos y Consolas
cmcmc 4 2,362 Último mensaje 15 Abril 2006, 06:01 am
por lokura1977
Memoria Insuficiente en Control
Programación Visual Basic
DarkMatrix 7 5,876 Último mensaje 21 Octubre 2011, 00:44 am
por BlackZeroX
Memoria Insuficiente?
Programación Visual Basic
XresH 0 2,117 Último mensaje 12 Mayo 2013, 04:51 am
por XresH
un maletin que dice memoria insuficiente para abrir la base de datos
Windows
fernandofv1 1 3,918 Último mensaje 21 Agosto 2013, 23:11 pm
por ccrunch
error memoria insuficiente vuelva a intentarlo mas tarde whatsapp
Android
Fox_Neo 2 6,833 Último mensaje 24 Agosto 2014, 18:34 pm
por Yassper
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines