Nel codice qui sotto, c'è qualche possibilità che il GC pulisca il MemoryStream in modo che ToArray fallisca, dato che è fuori dall'istruzione using?Sta chiamando MemoryStream.ToArray() pericoloso dopo lo smaltimento?
private static byte[] getBytes()
{
MemoryStream ms = null;
using (ms = new MemoryStream())
{
// ...
}
return ms.ToArray();
}
Non ho trovato nulla nei documenti, ma abbiamo test in Mono per questo e il codice funziona in questo caso. A proposito, non c'è bisogno di chiamare ms.Close(). – Gonzalo
Solo una nota: la documentazione di .NET 4.0 per MemoryStream.Close (http://msdn.microsoft.com/en-us/library/system.io.stream.close%28v=vs.100%29.aspx) * non * contiene "Il buffer è ancora disponibile su MemoryStream una volta che lo stream è stato chiuso." dichiarazione. Mi chiedo se siano finiti per cambiare comportamento. –
@ scottmarlowe: questa è la documentazione per Stream.Close. Sembra che abbiano appena smesso di fornire la "documentazione di override" per MemoryStream.Close. Cambiare il comportamento effettivo avrebbe rotto un sacco di codice. –