首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TcpClient资源处理

TcpClient资源处理
EN

Stack Overflow用户
提问于 2011-11-24 07:17:46
回答 2查看 1.2K关注 0票数 1

假设我有一个通过TcpClient.GetStream()生成的Stream。如果I为stream.Dispose(),是否需要处理创建StreamTcpClient

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-24 07:50:56

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

然而,我不相信这是一个好主意。

我会问您为什么要避免在TcpClient实例上调用Dispose()TcpClient实现IDisposable这一事实所隐含的约定是,当不再需要某个实例时,应该调用Dispose()

如果你违反了这份合同:

  • 这会让将来的代码维护者感到困惑吗?
  • 如果TcpClient的实现在未来的版本中发生了变化,该怎么办?
票数 3
EN

Stack Overflow用户

发布于 2011-11-24 07:31:28

好的。我自己从反光镜出来检查的。如果在TcpClient上调用GetStream,它会将成员m_DataStream初始化为非空值。

TcpClient的dispose方法的主体如下所示:

代码语言:javascript
复制
        IDisposable dataStream = this.m_DataStream;
        if (dataStream != null)
        {
            dataStream.Dispose();
        }
        else
        {
            //some other disposal strategy
        }

因此,如果我自己处理流,我执行的处理与TcpClient执行的处理相同。

因此,据我所知,如果我处理流,就没有必要处理TcpClient。

有人不同意吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8250403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档