我正在编写一个使用TCP连接到遗留应用程序的VB.NET应用程序。
通信工作正常并且连接后非常快,但即使我连接到本地计算机,当我创建新连接时总会有延迟(大约2.5-3.5秒):
Private _client As TcpClient
Public Property PortNumber As Int32 = 3338
Public Property ServerName As String = [Local machine name]
_client = New TcpClient(ServerName, PortNumber) ' <- takes some time to execute this line
有人可以建议对此有任何改进吗?
答案 0 :(得分:4)
这可能是一个名称解析问题。如果您对应用程序的生命周期内与计算机名称对应的IP地址不会发生变化感到高兴,您可以先解决它并存储IP地址。
TcpClient执行此操作的方式是调用Dns.GetHostAddresses(hostname)
,然后从其获取的列表中选择合适的地址(例如,如果您使用的是IPv4套接字,则选择IPv4地址)。
以TcpClient的源代码为例 - 一旦获得了IP地址,就可以继续以相同的方式使用TcpClient。
TCP连接总是非常昂贵的创建(毫秒,而不是秒),因此如果您正在进行大量非常短暂的连接,TCP可能不是最佳选择。这就是为什么像NTP和DNS这样的协议通常是基于UDP的,以及人们为什么要尝试重用HTTP连接的原因。
答案 1 :(得分:0)
网络API中的TcpClient
非常高。也许只有Socket类更高。我认为你不能提高这段代码的性能。这可能是一些网络延迟或DNS解析需要比平时更长的时间。请咨询您的网络管理员。