说我通过Stream
制作了TcpClient.GetStream()
。如果我stream.Dispose()
,是否有必要处理创建TcpClient
的{{1}}?
答案 0 :(得分:3)
查看ILSpy中TcpClient.GetStream
和TcpClient.Dispose
的实现,我同意如果您在流上调用Dispose()
而不是在客户端上调用,则不应该有资源泄漏。< / p>
然而,无论如何,我不相信这是个好主意。
我问你为什么要避免在Dispose()
的实例上调用TcpClient
。 TcpClient
实现IDisposable
这一事实所暗示的合同是,当不再需要实例时,应调用Dispose()
。
如果你违反了这份合同:
TcpClient
的实施在未来版本中发生变化怎么办?答案 1 :(得分:0)
行。我让Reflector自己检查一下。如果您在GetStream
上调用TcpClient
,则会将成员m_DataStream初始化为非空值。
TcpClient的dispose方法的主体看起来像这样:
IDisposable dataStream = this.m_DataStream;
if (dataStream != null)
{
dataStream.Dispose();
}
else
{
//some other disposal strategy
}
因此,如果我自己处理流,我执行的处理与TcpClient执行相同。
据我所知,如果我处理了流,那么处理TcpClient是不必要的。
有人不同意吗?