【问题标题】:MemoryStream in Using Statement - Do I need to call close()使用语句中的 MemoryStream - 我需要调用 close()
【发布时间】:2012-08-11 16:31:22
【问题描述】:

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

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

      ms.Close(); 
    }

【问题讨论】:

标签: c# using memorystream using-statement


【解决方案1】:

不,不是。

using 确保将调用Dispose(),而后者又调用Close() 方法。

您可以假设using 语句正在关闭所有类型的流。

来自MSDN

当您使用访问非托管资源的对象(例如 StreamWriter)时,一个好的做法是使用 using 语句创建实例。 using 语句会在使用它的代码完成时自动关闭流并在对象上调用 Dispose

【讨论】:

  • 我意识到这是旧的,但我想补充一点,除了using 之外,使用.Close() 也会导致代码分析警告“CA2202:不要多次处理对象” .有关更多信息,请阅读此处的“原因”部分:msdn.microsoft.com/query/…
  • 是不是反过来。 .Close() 会调用.Dispose()msdn.microsoft.com/en-us/library/…
  • Dispose() 调用 Close() 调用 Dispose(boolean)。
【解决方案2】:

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

不,你不需要。它将被自动调用的.Dispose() 方法调用:

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

【讨论】:

  • @HenkHolterman 实际上 Dispose() 调用 Close() 反过来又调用 Dispose(true)
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2013-04-10
  • 2013-06-08
  • 2011-02-22
  • 2011-08-04
  • 2015-01-08
相关资源
最近更新 更多