我正在编写一段使用嵌套流的代码:
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
无论如何都没有非托管资源,实际上不需要处置,它不会覆盖 Close
的 Stream
类。
Stream
还检查是否 Dispose
已经被调用了。这意味着在大多数情况下,您只需 Dispose
您正在使用的流。
关于C# 嵌套流与 using 语句,我应该使用两个 using 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56537127/