C# 嵌套流与 using 语句,我应该使用两个 using 吗?
C# nested stream with using statement, should I use two using?
我正在编写一段使用嵌套流的代码:
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
,这反过来会影响 abstract 的 Dispose
管道 Stream
class.
protected override void Dispose(bool disposing)
{
try
{
if (!_disposed)
{
if (disposing && (this._baseStream != null))
this._baseStream.Close();
_disposed = true;
}
}
finally
{
base.Dispose(disposing);
}
}
值得注意的是,MemoryStream
无论如何都没有非托管资源,实际上不需要Disposed,它不需要override Close
的 Stream
class.
Stream
还会检查 Dispose
是否已被调用。这意味着在大多数情况下,您只需要 Dispose
您正在使用的 流 。
我正在编写一段使用嵌套流的代码:
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
,这反过来会影响 abstract 的 Dispose
管道 Stream
class.
protected override void Dispose(bool disposing)
{
try
{
if (!_disposed)
{
if (disposing && (this._baseStream != null))
this._baseStream.Close();
_disposed = true;
}
}
finally
{
base.Dispose(disposing);
}
}
值得注意的是,MemoryStream
无论如何都没有非托管资源,实际上不需要Disposed,它不需要override Close
的 Stream
class.
Stream
还会检查 Dispose
是否已被调用。这意味着在大多数情况下,您只需要 Dispose
您正在使用的 流 。