C# 处理后调用MemoryStream.ToArray()是否危险?

C# 处理后调用MemoryStream.ToArray()是否危险?,c#,stream,C#,Stream,在下面的代码中,GC是否有可能清除MemoryStream以便ToArray失败,因为它不在using语句中 private static byte[] getBytes() { MemoryStream ms = null; using (ms = new MemoryStream()) { // ... } return ms.ToArray(); } 不,那是不可能的。这样做是安全的,MemoryStream保持对字节数组的强引

在下面的代码中,GC是否有可能清除MemoryStream以便ToArray失败,因为它不在using语句中

private static byte[] getBytes()
{
    MemoryStream ms = null;

    using (ms = new MemoryStream())
    {
        // ...
    }

    return ms.ToArray();
}

不,那是不可能的。这样做是安全的,
MemoryStream
保持对字节数组的强引用

我看看能不能找到任何关于担保的文件

编辑:有点

发件人:

一旦流被关闭,
内存流
上的缓冲区仍然可用

诚然,这并不能保证它适用于
Dispose
,但它被记录为调用
Stream.Close


MemoryStream.Dispose(bool)
然后可以被覆盖以释放阵列,但根据我的经验,这并不是一个突破性的改变。我在文档中没有找到任何内容,但我们在Mono中对此进行了测试,代码在本例中起作用。顺便说一句,无需调用ms.Close()。只需注意:MemoryStream.Close()的.NET 4.0文档不包含“一旦流关闭,MemoryStream上的缓冲区仍然可用”语句。让我怀疑他们是否最终改变了行为。@scottmarlowe:这是Stream.Close的文档。看起来他们刚刚停止为MemoryStream.Close提供“覆盖文档”。改变实际行为会破坏很多代码。@scottmarlowe:是的。基本上,Close/Dispose不会对缓冲区执行任何操作。对于v1.0,他们本可以选择不同的方法,但现在改变已经太迟了。
ToArray
函数()的文档中指出“当MemoryStream关闭时,此方法有效。”