假设我有一个通过TcpClient.GetStream()生成的Stream。如果I为stream.Dispose(),是否需要处理创建Stream的TcpClient
发布于 2011-11-24 07:50:56
看看TcpClient.GetStream和TcpClient.Dispose在ILSpy中的实现,我同意,如果在流上调用Dispose(),而不是在客户端上调用,就不应该有资源泄漏。
然而,我不相信这是一个好主意。
我会问您为什么要避免在TcpClient实例上调用Dispose()。TcpClient实现IDisposable这一事实所隐含的约定是,当不再需要某个实例时,应该调用Dispose()。
如果你违反了这份合同:
TcpClient的实现在未来的版本中发生了变化,该怎么办?发布于 2011-11-24 07:31:28
好的。我自己从反光镜出来检查的。如果在TcpClient上调用GetStream,它会将成员m_DataStream初始化为非空值。
TcpClient的dispose方法的主体如下所示:
IDisposable dataStream = this.m_DataStream;
if (dataStream != null)
{
dataStream.Dispose();
}
else
{
//some other disposal strategy
}因此,如果我自己处理流,我执行的处理与TcpClient执行的处理相同。
因此,据我所知,如果我处理流,就没有必要处理TcpClient。
有人不同意吗?
https://stackoverflow.com/questions/8250403
复制相似问题