我是否必须存储TcpClient,即使我只关心它的流?

时间:2010-03-08 11:45:26

标签: c# garbage-collection tcpclient networkstream

TcpClient的新实例连接到远程主机。检索并存储其NetworkStream。我是否还必须存储TcpClient本身,以确保它不是垃圾回收?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果没有引用该对象,它最终将被垃圾收集,这将使您的NetworkStream无法使用。只要您想使用它,就需要保留该TcpClient对象的引用。