2012-08-15 11 views
30

Cuando uso un flujo de memoria en una instrucción de uso, ¿necesito llamar al cerrar? Por ejemplo, ¿se necesita ms.Close() aquí?MemoryStream en el uso de instrucción: ¿Necesito llamar a close()

using (MemoryStream ms = new MemoryStream(byteArray)) 
    { 
     // stuff 

     ms.Close(); 
    } 
+0

http://stackoverflow.com/a/234257/490018 –

+0

posible doblaje: http://stackoverflow.com/questions/911408/does-stream-dispose-always-call-stream-close-and- stream-flush – sloth

Respuesta

52

No, no lo es.

using asegura que se llamará Dispose(), que a su vez llama al método Close().

Puede suponer que todos los tipos de flujos se cierran con la instrucción using.

De MSDN:

Cuando se utiliza un objeto que tiene acceso a los recursos no administrados, tales como un StreamWriter, una buena práctica es la creación de la instancia con una instrucción using. La instrucción using cierra automáticamente la secuencia y llama a Dispose en el objeto cuando el código que lo está utilizando ha completado.

+3

Me doy cuenta de que esto es antiguo, pero me gustaría agregar que usar '.Close()' además del 'using' también causará una advertencia de análisis de código" CA2202: No deseche los objetos varias veces ". Para obtener más información, lea la sección "Causa" aquí: http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(CA2202);k(TargetFrameworkMoniker-.NETFramework,Version% 3Dv4.0) –

+0

¿No es al revés? Que '.Close()' llamará a '.Dispose()'? https://msdn.microsoft.com/en-us/library/system.io.stream.close(v=vs.110).aspx –

+0

Dispose() llamadas Close() que llama a Dispose (boolean). – sloth

6

Cuando se utiliza una secuencia de memoria en una instrucción using necesito para llamar a cerca?

No, no es necesario. Se va a llamar por el método .Dispose() que se llama de forma automática:

using (MemoryStream ms = new MemoryStream(byteArray)) 
{ 
    // stuff 
} 
+3

@HenkHolterman En realidad 'Dispose()' llama 'Close()' que a su vez llama a 'Dispose (true) '. – sloth

Cuestiones relacionadas