Есть ли способ улучшить скорость соединения TcpClient - PullRequest
0 голосов
/ 31 января 2012

Я пишу приложение VB.NET, которое подключается к устаревшему приложению с использованием TCP.

Связь работает нормально и очень быстро после подключения, но всегда есть задержка (около 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

Может кто-нибудь предложить какое-либо улучшение этого?

Ответы [ 2 ]

4 голосов
/ 31 января 2012

Вероятно, это проблема разрешения имен.Если вы удовлетворены тем, что IP-адрес, соответствующий имени компьютера, не изменится в течение срока службы приложения, вы можете сначала разрешить его и сохранить IP-адрес.

Способ, которым TcpClient делает это, заключается в вызовеDns.GetHostAddresses(hostname) и затем выбирает подходящий адрес из списка, который он возвращает (например, он выбирает адрес IPv4, если вы используете сокет IPv4).

Посмотрите на источник для TcpClient для примера -Как только вы получили IP-адрес, вы можете продолжать использовать TcpClient таким же образом.

TCP-соединение всегда будет создавать довольно дорогостоящую вещь (хотя миллисекунды, а не секунды), так что если выПри создании очень большого количества очень коротких соединений TCP может оказаться не лучшим выбором.Вот почему такие протоколы, как NTP и DNS, как правило, основаны на UDP, и поэтому люди пытаются приложить некоторые усилия, чтобы повторно использовать соединения для HTTP.

0 голосов
/ 31 января 2012

A TcpClient довольно высоко лежит в сетевых API. Может быть, только класс Socket выше. Я не думаю, что вы могли бы значительно улучшить производительность этого кода. Вероятно, это задержка в сети или разрешение DNS занимает больше времени, чем обычно Обратитесь к администратору сети.

...