TcpClient 的新实例连接到远程主机。它的 NetworkStream 被检索和存储。我是否还必须存储 TcpClient 本身以确保它不会被垃圾收集?
如果您要回答“您必须存储它才能处理它”:在我的具体情况下,TcpClient 通常会存在很长时间(应用程序生命周期),因此处理它并不是必须的。但是,我同意,一般来说,它必须被存储才能调用 Dispose。
TcpClient 的新实例连接到远程主机。它的 NetworkStream 被检索和存储。我是否还必须存储 TcpClient 本身以确保它不会被垃圾收集?
如果您要回答“您必须存储它才能处理它”:在我的具体情况下,TcpClient 通常会存在很长时间(应用程序生命周期),因此处理它并不是必须的。但是,我同意,一般来说,它必须被存储才能调用 Dispose。
如果仍被引用,则不会删除 NetworkStream。垃圾收集器只清理不再被引用的对象——它并不真正了解它必须收集的对象,它只是跟踪引用。
但是,您可能会发现 TcpClient 有一个终结器,如果 TcpClient 被收集,它将使流无效。保留对 TcpClient 的引用可能更安全。(据我从源代码中可以看出,终结器目前没有这样做,但不能保证将来不会这样做。)
如果未引用该对象,最终将被垃圾回收,这将使您的 NetworkStream 无法使用。只要您希望使用它,就需要保留该 TcpClient 对象的引用。