Я пытался отправлять / получать данные с помощью TcpClient. Я провел два эксперимента и нашел что-то интересное.
Я установил TcpListener на сервере в Японии и TcpClient в Великобритании. Я продолжал посылать 500 байтов в TcpListener и когда TcpListener отправляет 10KB обратно в TcpClient. Я держал этот цикл отправки / получения 500 раз в каждом эксперименте.
Эксперимент 1:
В каждом цикле отправки / получения я создаю новый TcpClient (время отсчитывается непосредственно перед созданием) и отправляю / получаю
Эксперимент 2:
Для всех циклов у меня есть только один TcpClient, и он поддерживает соединение с TcpListener и выполняет отправку / получение 500 раз.
Результат:
Среднее значение затрат времени на один цикл:
E1: 1,8 секунды, E2: 0,49 секунды.
Я весьма удивлен этим результатом. Таким образом, поддержание связи для постоянной отправки / получения может сэкономить много времени ??? почти 2/3 времени.
Это правда ???
Спасибо
==== новый ====
@ Jon Skeet, @dbemerlin, спасибо за ответ. Я догадался, что рукопожатия Tcp требуют некоторого времени.
Итак, я выполнил эксперимент 3.
Я устанавливаю HttpListener в качестве сервера и использую WebClient для отправки / получения, размеры данных точно такие же. И каждый раз я использовал новый WebClient для отправки / получения между Великобританией и Японией.
Результат равен 0,86 (в среднем от цикла 500 раз, т.е. отправка / получение).
Я полагаю, что сами WebClient / HttpLisener являются Tcp, верно? Как они могут быть быстрее, чем необработанные TcpClient / TcpListener в моих экспериментах ??
Еще раз спасибо