我正在制作一个向许多 TCP 侦听器发送数据的程序。如果其中一个 TCP 发送通道不再使用,我们是否需要使用 TCPClient.close 将其关闭。如果我们让它打开会发生什么?
谢谢!
我不会Close
明确使用 - 我只是通过using
声明处理它:
using (TcpClient client = ...)
{
// Use the client
}
如果我们让它打开会发生什么?
如果双方都没有关闭连接,它将毫无意义地坐在那里无所事事。
如果另一端关闭连接,我怀疑你会在 TIME_WAIT 或类似的时间有一个本地连接;我不知道确切的细节,但这并不理想。
关键是它可能会占用一些系统资源,从根本上来说并不理想。它会导致你的程序崩溃和你的系统发疯吗?可能不会——至少除非你要创建大量这样的东西。不过,用非内存资源处理任何东西仍然是一个好主意。
如果您将其保持打开状态,GC(垃圾收集器)将及时处理您的对象。
使用 TCPClient,终结器(GC 清理对象时运行的代码)调用 Dispose(),这反过来关闭连接并释放它使用的任何操作系统资源。
您不知道 GC 何时进行清理,因此这种方法是不确定的。这可能不是一个或两个打开连接的问题,但是如果您打开大量这些连接,您可能会使系统资源匮乏。
一个好的做法是在使用完 TCPClients 后始终对其进行处置,这可以通过using
块轻松完成。(如 Jon Skeets 的回答所示......)