2012-08-10 15 views
6

Pensé que era una buena práctica, al acceder a los recursos de ensamblaje integrados usando el método Assembly.GetManifestResourceStream, cerrar el Stream devuelto después de terminar con él. Sin embargo, yo sólo vi algo en el siguiente artículo:¿Debo cerrar las cadenas devueltas por Assembly.GetManifestResourceStream?

http://msdn.microsoft.com/en-us/library/ms950960.aspx

// Get the stream that holds the resource 
// NOTE1: Make sure not to close this stream! 
// NOTE2: Also be very careful to match the case 
//  on the resource name itself 
Stream stream = 
    assem.GetManifestResourceStream("Azul.jpg"); 

// Load the bitmap from the stream 
this.BackgroundImage = new Bitmap(stream); 

El comentario aquí dice que la corriente debe no se cerrará, aunque el artículo no hace mención de por qué. Las búsquedas en Google no han proporcionado nada concluyente; algunas personas parecen cerrar esta secuencia, otras no y dicen que el recolector de basura se ocupará de ella.

¿Debo cerrar las corrientes devueltas por Assembly.GetManifestResourceStream? ¿Hay alguna razón particular por la que no debería?

Respuesta

4

Ese comentario no quiere que lo cierre porque va a crear un objeto Bitmap a partir de él. Generalmente, debe cerrar las transmisiones una vez que haya terminado de usarlas o su aplicación estará sujeta a fugas de memoria.

+1

Sigue creando un mapa de bits a partir de él, pero ¿por qué todavía no lo cierra * después de * crear el mapa de bits? – Jez

+0

El ejemplo está utilizando el mapa de bits como una imagen de fondo de un formulario de Windows, por lo que el mapa de bits (y el flujo subyacente) será necesario para toda la duración de la vida del formulario. Desafortunadamente, no es un muy buen ejemplo de cómo administrar adecuadamente los objetos IDisposables. –

Cuestiones relacionadas