性能比较TcpClient与HttpWebRequest

时间:2009-09-22 15:36:56

标签: c# asp.net tcp httpwebrequest

我将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 个答案:

答案 0 :(得分:6)

他们显然做了不同的事情 - 你没有向TcpClient发送任何数据,所以另一端必须已经知道该做什么。

WebRequest版本中,您甚至发布了一些数据......为什么不需要TcpClient版本中的数据?

基本上看起来你不是在比较苹果和苹果。鉴于您正在与服务器讨论不同的协议,很可能您的特定服务器使用TcpClient直接通过简化协议更快。这与通常比较HttpWebRequestTcpClient 不同。你不能真正进行这样的一般比较,因为HTTP是通过TCP分层开始的。

答案 1 :(得分:3)

TcpClient对于大多数事情来说会更快,因为HttpWebRequest必须做其他一些事情......例如构建HTTP请求的标头,以及管理流连接通过诸如分块请求之类的东西。其中TcpClient只是内置所有HTTP标准的原始连接。

答案 2 :(得分:2)

只需使用System.Diagnostics.Stopwatch进行时间比较,就会更精确。

相关问题