3

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

谢谢!

4

2 回答 2

11

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

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

如果我们让它打开会发生什么?

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

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

关键是它可能会占用一些系统资源,从根本上来说并不理想。它会导致你的程序崩溃和你的系统发疯吗?可能不会——至少除非你要创建大量这样的东西。不过,用非内存资源处理任何东西仍然是一个好主意。

于 2012-07-28T11:58:09.693 回答
3

如果您将其保持打开状态,GC(垃圾收集器)将及时处理您的对象。

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

您不知道 GC 何时进行清理,因此这种方法是不确定的。这可能不是一个或两个打开连接的问题,但是如果您打开大量这些连接,您可能会使系统资源匮乏。

一个好的做法是在使用完 TCPClients 后始终对其进行处置,这可以通过using块轻松完成。(如 Jon Skeets 的回答所示......)

于 2012-07-28T12:03:13.257 回答