TcpClient的新实例连接到远程主机.检索并存储其NetworkStream.我是否还必须存储TcpClient本身,以确保它不会被垃圾收集?
万一您要回答“您必须存储它才能处置它”:
在我的特定情况下,TcpClient通常寿命很长(应用程序生命周期),因此处置它并不是必须的.但是,我同意,通常必须将其存储起来才能调用Dispose.
解决方法:
如果仍被引用,则不会删除NetworkStream.垃圾收集器仅清除不再引用的对象-它对要收集的对象一无所知,它只跟踪引用.
但是,您可能会发现TcpClient具有终结器,如果已收集TcpClient,终结器将使流无效.保留对TcpClient的引用也可能更安全. (据我从源代码中看到的,终结器当前未执行此操作,但不能保证将来不会.)