Сравнение производительности TcpClient и HttpWebRequest - PullRequest
1 голос
/ 22 сентября 2009

Я отправляю строку XML в порт в окне AIX. У меня есть два способа подключения к этой коробке (TcpClient & HttpWebRequest). У меня есть таймеры, чтобы дать мне представление о том, сколько времени требуется AIX для обработки моего запроса и ответа.

Похоже, что TcpClient работает быстрее, чем запрос HttpWebRequest, до 100 миллисекунд. Я подозреваю, что мое местоположение таймера может быть неправильным. В любом случае, я не думаю, что местоположение таймера будет таким большим различием во времени ответа.

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

Известно ли, что подход TcpClient быстрее?

// TcpClient
TcpClient client = new TcpClient(host, port);
DateTime x = DateTime.Now;
NetworkStream stream = client.GetStream();
NetworkStream stream = client.GetStream();
stream.Write(request, 0, request.Length);
stream.Flush();
while ((count = stream.Read(buffer, 0, buffer.Length)) > 0)
            response.Append(encoder.GetString(buffer, 0, count));
DateTime y = DateTime.Now;
totalMS = y.Subtract(x).TotalMilliseconds;


// HttpWebRequest 
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(URI);
using (Stream webStream = webRequest.GetRequestStream())
{
    webStream.Write(postdata, 0, postdata.Length);
    webStream.Close();
    DateTime x = DateTime.Now;
    using (WebResponse webresponse = webRequest.GetResponse())
    {
        webresponse.Close();
        DateTime y = DateTime.Now;
        using (Stream rs = webresponse.GetResponseStream())
        {
            using (StreamReader sr = new StreamReader(rs, Encoding.Default))
            {
                // Read response to end
            }
        }
    }
}
totalMS = y.Subtract(x).TotalMilliseconds;

Ответы [ 3 ]

6 голосов
/ 22 сентября 2009

Ну, они явно делают разные вещи - вы не посылаете никаких данных по TcpClient, поэтому другой конец уже должен знать, что делать.

В версии WebRequest вы даже публикуете некоторые данные ... почему вам не нужны эти данные в версии TcpClient?

Похоже, вы не сравниваете яблоки с яблоками. Учитывая, что вы говорите с сервером разные протоколы, вполне возможно, что ваш конкретный сервер быстрее использует TcpClient по упрощенному протоколу. Это не то же самое, что сравнение HttpWebRequest и TcpClient в целом . Вы не можете сделать такое общее сравнение, так как HTTP имеет многоуровневую структуру по сравнению с TCP.

3 голосов
/ 22 сентября 2009

В большинстве случаев TcpClient будет быстрее, потому что HttpWebRequest должен выполнять кучу других вещей ... Например, создавать заголовки для HTTP-запроса и управлять потоковыми соединениями с помощью таких вещей, как chunked Запросы. Где TcpClient - это просто необработанное соединение без всех встроенных стандартов HTTP.

2 голосов
/ 22 сентября 2009

Просто используйте System.Diagnostics.Stopwatch для сравнения времени, это более точно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...