En el siguiente código, ¿hay alguna posibilidad de que el GC limpie el MemoryStream para que ToArray falle, ya que está fuera de la instrucción using?¿Llamar a MemoryStream.ToArray() es peligroso después de eliminarlo?
private static byte[] getBytes()
{
MemoryStream ms = null;
using (ms = new MemoryStream())
{
// ...
}
return ms.ToArray();
}
No encontré nada en los documentos, pero tenemos pruebas en Mono para esto y el código funciona en este caso. Por cierto, no es necesario llamar a ms.Close(). – Gonzalo
Solo una nota: La documentación de .NET 4.0 para MemoryStream.Close (http://msdn.microsoft.com/en-us/library/system.io.stream.close%28v=vs.100%29.aspx) * no * contiene el mensaje "El búfer aún está disponible en un MemoryStream una vez que se ha cerrado la secuencia". declaración. Me hace preguntarme si terminaron cambiando el comportamiento. –
@scottmarlowe: Esa es la documentación de Stream.Close. Parece que acaban de dejar de proporcionar "documentación sobresaliente" para MemoryStream.Close. Cambiar el comportamiento real habría roto una gran cantidad de código. –