2010-10-20 2 views

risposta

19

No, non c'è possibilità. È sicuro: lo MemoryStream mantiene un forte riferimento all'array di byte.

Vedrò se riesco a trovare alcuna documentazione su garanzie ...

EDIT: Sorta di ...

Da MemoryStream.Close:

Il buffer è ancora disponibile su un MemoryStream una volta che lo stream è stato chiuso.

Certo che non garantisce per Dispose, ma questo è documentato da chiamare Stream.Close.

MemoryStream.Dispose(bool)potrebbe quindi essere sottoposto a override per rilasciare l'array, ma non è nella mia esperienza, e sarebbe un cambiamento di rottura a questo punto.

+0

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

+0

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. –

+0

@ 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. –