Является ли подключение объекта TcpClient со строкой хоста и номером порта медленнее, чем при использовании IPEndpoint? - PullRequest
0 голосов
/ 26 января 2011

TcpClient имеет один метод Connect, который принимает имя хоста как строку и порт.

TcpClient.Connect(String hostname, Int32 port)

Есть еще один вариант, который использует IPEndPoint.

TcpClient.Connect(IPEndPoint endpoint)

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

Итак, мой вопрос: быстрее ли второй вариант, когда я уже знаю IP-адрес?

приписка
Я занимаюсь разработкой для Windows Mobile (6.1) и тестирую ее через маршрутизатор в моей локальной сети. Когда маршрутизатор подключен к открытому интернету, соединения происходят быстро, и я получаю быстрый ответ от сервера. Но когда я использую только свою локальную сеть (т. Е. Маршрутизатор отключен от открытого Интернета), соединения, кажется, требуют вечности. Не знаю, ускоряет ли открытый интернет разрешение DNS.

1 Ответ

1 голос
/ 26 января 2011

Это происходит так, как вы и предполагали: первая перегрузка (имя хоста, порт) внутренне выполняет поиск DNS, а затем вызывает вторую перегрузку (IPEndPoint). Если вы хотите увидеть, что именно происходит, вы можете скачать .NET Reflector (http://www.red -gate.com / products / dotnet-development / отражатель / ) и проверить класс TcpClient.

При считывании исходной информации устройство выглядит так, как будто оно все еще пытается использовать DNS, к которому оно больше не может подключаться, что приводит к превышению времени ожидания. Я не знаю достаточно о сети, чтобы подтвердить это предположение.

...