我正在编写一段使用嵌套流的代码:
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))
{
}
答案 0 :(得分:2)
创建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
正在使用的流即可。