TcpClient资源处理

时间:2011-11-23 23:17:46

标签: c# stream dispose tcpclient

说我通过Stream制作了TcpClient.GetStream()。如果我stream.Dispose(),是否有必要处理创建TcpClient的{​​{1}}?

2 个答案:

答案 0 :(得分:3)

查看ILSpy中TcpClient.GetStreamTcpClient.Dispose的实现,我同意如果您在流上调用Dispose()而不是在客户端上调用,则不应该有资源泄漏。< / p>

然而,无论如何,我不相信这是个好主意。

我问你为什么要避免在Dispose()的实例上调用TcpClientTcpClient实现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是不必要的。

有人不同意吗?