在Using语句中使用MemoryStream - 我需要调用close()吗?

45

当在using语句中使用内存流时,我需要调用Close吗?例如,这里需要ms.Close()吗?

  using (MemoryStream ms = new MemoryStream(byteArray)) 
    {  
      // stuff 

      ms.Close(); 
    }

https://dev59.com/pXVC5IYBdhLWcg3woCnN#234257 - Sergey Vyacheslavovich Brunov
可能的重复:https://dev59.com/NnNA5IYBdhLWcg3wjOzf - sloth
2个回答

71

不,不是。

using 确保调用 Dispose() ,进而调用 Close() 方法。

你可以假设所有类型的流都被 using 语句关闭。

来自 MSDN 的说明:

当你使用访问非托管资源的对象(如 StreamWriter)时,最好使用 using 语句创建实例。使用语句会在代码完成后自动关闭流并调用 Dispose 对象


3
我知道这是老话题了,但我想补充一下,在使用using的同时加上.Close()也会导致代码分析警告"CA2202:不要多次处理对象"。更多信息请阅读此处的“原因”部分:http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(CA2202);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.0) - Adam Plocher
难道不应该是另一种方式吗?即.Close()将调用.Dispose()吗? https://msdn.microsoft.com/zh-cn/library/system.io.stream.close(v=vs.110).aspx - Levi
Dispose() 调用 Close(),Close() 又调用 Dispose(boolean)。 - sloth

8

在使用内存流时,如果使用using语句,我需要调用close吗?

不需要。因为.Dispose()方法会自动调用close方法:

using (MemoryStream ms = new MemoryStream(byteArray)) 
{  
    // stuff 
}

3
实际上,Dispose() 调用 Close(),然后 Close() 又会调用 Dispose(true) - sloth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接