【问题标题】:Do I have to store a TcpClient even though I only care about its stream?即使我只关心它的流,我是否必须存储一个 TcpClient ?
【发布时间】:2010-03-08 21:04:37
【问题描述】:

一个新的 TcpClient 实例连接到远程主机。它的 NetworkStream 被检索和存储。我是否还必须存储 TcpClient 本身以确保它不会被垃圾收集?

如果您要回答“您必须存储它才能处理它”: 在我的具体情况下,TcpClient 通常会存在很长时间(应用程序生命周期),因此处理它并不是必须的。但是,我同意,一般来说,它必须被存储才能调用 Dispose。

【问题讨论】:

  • 我在问。第二段只是解释我处理它的观点。编辑了问题以使其更清楚。

标签: c# garbage-collection tcpclient networkstream


【解决方案1】:

如果仍被引用,则不会删除 NetworkStream。垃圾收集器只清理不再被引用的对象——它并不真正了解它必须收集的对象,它只是跟踪引用。

但是,您可能会发现 TcpClient 有一个终结器,如果 TcpClient 被收集,它将使流无效。保留对 TcpClient 的引用可能更安全。 (据我从源代码中可以看出,终结器当前不会这样做,但不能保证将来不会。)

【讨论】:

    【解决方案2】:

    如果对象没有被引用,它最终会被垃圾回收,这会使你的 NetworkStream 不可用。只要您想使用它,就需要保留该 TcpClient 对象的引用。

    【讨论】:

    • 现在我很困惑——迈克基本上是在说相反的意思。谁是对的? :)
    • 如果他检查过,那么他是对的。我虽然 TcpClient 的终结器使 NetworkStream 无效。但正如他所说,你不能依赖它。最好保留参考。
    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2021-04-11
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2010-12-21
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多