C#如果不再使用TCPClient.Close,我们是否需要关闭TCPClient?

时间:2012-07-28 11:53:01

标签: c# tcp tcpclient

我正在制作一个向许多TCP侦听器发送数据的程序。如果不再使用其中一个TCP发送通道,我们是否需要使用TCPClient.close将其关闭。如果我们把它打开会发生什么?

谢谢!

2 个答案:

答案 0 :(得分:11)

我不会明确使用Close - 我只是通过using语句处理它:

using (TcpClient client = ...)
{
    // Use the client
}
  

如果我们把它打开会怎么样?

如果任何一方都没有关闭连接,它将毫无意义地坐在那里无所事事。

如果另一端关闭连接,我怀疑你在TIME_WAIT或类似的东西中会有一段时间的本地连接;我不知道确切的细节,但它并不理想。

重点是可能耗尽一些系统资源,从根本上说它并不理想。是否会导致程序崩溃,系统变得疯狂?可能不是 - 至少除非你创造了大量的这些。但是,处理具有非内存资源的任何内容仍然是一个好主意。

答案 1 :(得分:3)

如果你打开它,GC(垃圾收集器)会及时处理你的物体。

使用TCPClient,终结器(GC清理对象时运行的代码)调用Dispose(),然后关闭连接并释放它使用的任何操作系统资源。

你不知道GC什么时候清理它,所以这种方法是不确定的。对于一个或两个打开的连接,这可能不是问题,但如果打开大量的连接,可能会使资源系统挨饿。

一个好的做法是在完成TCPClients时总是处理它们,这可以通过using块轻松完成。 (如Jon Skeets回答的那样......)