我正在制作一个向许多TCP侦听器发送数据的程序。如果不再使用其中一个TCP发送通道,我们是否需要使用TCPClient.close将其关闭。如果我们把它打开会发生什么?
谢谢!
答案 0 :(得分:11)
我不会明确使用Close
- 我只是通过using
语句处理它:
using (TcpClient client = ...)
{
// Use the client
}
如果我们把它打开会怎么样?
如果任何一方都没有关闭连接,它将毫无意义地坐在那里无所事事。
如果另一端关闭连接,我怀疑你在TIME_WAIT或类似的东西中会有一段时间的本地连接;我不知道确切的细节,但它并不理想。
重点是可能耗尽一些系统资源,从根本上说它并不理想。是否会导致程序崩溃,系统变得疯狂?可能不是 - 至少除非你创造了大量的这些。但是,处理具有非内存资源的任何内容仍然是一个好主意。
答案 1 :(得分:3)
如果你打开它,GC(垃圾收集器)会及时处理你的物体。
使用TCPClient,终结器(GC清理对象时运行的代码)调用Dispose(),然后关闭连接并释放它使用的任何操作系统资源。
你不知道GC什么时候清理它,所以这种方法是不确定的。对于一个或两个打开的连接,这可能不是问题,但如果打开大量的连接,可能会使资源系统挨饿。
一个好的做法是在完成TCPClients时总是处理它们,这可以通过using
块轻松完成。 (如Jon Skeets回答的那样......)