In the below code, is there any chance the GC will clean out the MemoryStream so that ToArray will fail, since it is outside the using statement?
private static byte[] getBytes()
{
MemoryStream ms开发者_如何转开发 = null;
using (ms = new MemoryStream())
{
// ...
}
return ms.ToArray();
}
No, there's no chance of that. It's safe to do - the MemoryStream
keeps a strong reference to the byte array.
I'll see if I can find any documentation about guarantees...
EDIT: Sort of...
From MemoryStream.Close
:
The buffer is still available on a
MemoryStream
once the stream has been closed.
Admittedly that doesn't guarantee it for Dispose
, but that's documented to call Stream.Close
.
MemoryStream.Dispose(bool)
could then be overridden to release the array, but it doesn't in my experience, and it would be a breaking change at this point.
精彩评论