17
在下面的代碼中,GC是否有機會清除MemoryStream,使ToArray失敗,因爲它在using語句之外?處置後調用MemoryStream.ToArray()是否危險?
private static byte[] getBytes()
{
MemoryStream ms = null;
using (ms = new MemoryStream())
{
// ...
}
return ms.ToArray();
}
我沒有在文檔中找到任何內容,但我們在Mono中爲此進行了測試,代碼在這種情況下適用。順便說一句,不需要調用ms.Close()。 – Gonzalo 2010-10-20 18:58:13
只需注意:MemoryStream.Close的.NET 4.0文檔(http://msdn.microsoft.com/en-us/library/system.io.stream.close%28v=vs.100%29.aspx)*不包含「一旦流被關閉,緩衝區仍然可用於MemoryStream」。聲明。讓我想知道他們是否確實改變了行爲。 – 2013-04-19 01:05:19
@scottmarlowe:這是Stream.Close的文檔。看起來他們剛剛停止爲MemoryStream.Close提供「覆蓋文檔」。改變實際行爲會破壞很多代碼。 – 2013-04-19 05:55:28