C# 嵌套流与 using 语句,我应该使用两个 using 吗?

标签 c# stream using memorystream

我正在编写一段使用嵌套流的代码:

using (var zip = new ZlibStream(new MemoryStream(to_be_unziped), CompressionMode.Decompress))
{

}

还好吗?或者我应该把它写成:

using (var memory_stream = new MemoryStream(to_be_unziped))
using (var zip = new ZlibStream(memory_stream, CompressionMode.Decompress))
{

}

最佳答案

当您创建 ZlibStream并传入 MemoryStream它持有对它的引用。

当它是 Disposed , 它调用 Close在该引用上,这又将达到 Dispose 摘要 的管道 Stream类。

protected override void Dispose(bool disposing)
{
    try
    {
        if (!_disposed)
        {
            if (disposing && (this._baseStream != null))
                this._baseStream.Close();
            _disposed = true;
        }
     }
     finally
     {
        base.Dispose(disposing);
     }
}

值得注意的是,MemoryStream无论如何都没有非托管资源,实际上不需要处置,它不会覆盖 CloseStream类。

Stream还检查是否 Dispose已经被调用了。这意味着在大多数情况下,您只需 Dispose您正在使用的

关于C# 嵌套流与 using 语句,我应该使用两个 using 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56537127/

相关文章:

c# - 从C#docker访问kubernetes服务

c# - Linq & String.ToLower() 奇怪的行为

java - 使用 Java 8 Stream API 计算连续相同对象的数量

node.js - 在 NodeJS 中将 Stream 输出传送到 Socket.IO

templates - C++ 模板别名的等价性

c++ - C++11中关键字using的用例

c# - Mono 中的 System.Data.Entity.Design.PluralizationServices 错误

python - 如何接收 “icecast”网络广播流以使用Python立即播放?

c# - 为什么这个文件用了C1ZipFile后还是删不掉?

c# - 如何使用C#将新的Counter属性添加到xml节点