开发者

Is calling MemoryStream.ToArray() dangerous after disposing?

开发者 https://www.devze.com 2023-01-21 09:23 出处:网络
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?

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消