C# TcpClient与HttpWebRequest的性能比较
我正在将一个XML字符串发送到AIX框上的一个端口。我有两种连接到此框的方式(TcpClient和HttpWebRequest)。我有计时器,可以让我知道AIX盒处理我的请求和响应需要多长时间 TcpClient似乎比HttpWebRequest快100毫秒。我怀疑我的计时器位置可能不正确。无论哪种方式,我都不认为计时器的位置会造成响应时间上的如此大的差异 我的另一个想法是使用语句。也许他们保持连接打开的时间比TcpClient长 TcpClient方法是否更快C# TcpClient与HttpWebRequest的性能比较,c#,asp.net,tcp,httpwebrequest,C#,Asp.net,Tcp,Httpwebrequest,我正在将一个XML字符串发送到AIX框上的一个端口。我有两种连接到此框的方式(TcpClient和HttpWebRequest)。我有计时器,可以让我知道AIX盒处理我的请求和响应需要多长时间 TcpClient似乎比HttpWebRequest快100毫秒。我怀疑我的计时器位置可能不正确。无论哪种方式,我都不认为计时器的位置会造成响应时间上的如此大的差异 我的另一个想法是使用语句。也许他们保持连接打开的时间比TcpClient长 TcpClient方法是否更快 // TcpClient Tcp
// 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;
只需使用System.Diagnostics.Stopwatch进行时间比较,就更准确了。只需使用System.Diagnostics.Stopwatch进行时间比较,就更准确了。很明显,他们在做不同的事情-您没有将任何数据发送到
TcpClient
,所以另一端肯定已经知道该怎么做了
在WebRequest
版本中,您甚至发布了一些数据。。。为什么不需要TcpClient
版本中的数据
基本上,看起来你不是在比较苹果和苹果。考虑到您正在与服务器讨论不同的协议,很可能是您的特定服务器直接使用
TcpClient
比使用简化协议更快。这与通常比较HttpWebRequest
和TcpClient
不同。您不能真正进行这样的一般性比较,因为HTTP从一开始就是在TCP上分层的。很明显,它们在做不同的事情-您没有将任何数据发送到TcpClient
,因此另一端必须已经知道该做什么
在WebRequest
版本中,您甚至发布了一些数据。。。为什么不需要TcpClient
版本中的数据
基本上,看起来你不是在比较苹果和苹果。考虑到您正在与服务器讨论不同的协议,很可能是您的特定服务器直接使用
TcpClient
比使用简化协议更快。这与通常比较HttpWebRequest
和TcpClient
不同。您不能真正进行这样的一般性比较,因为HTTP从一开始就是在TCP上分层的。对于大多数事情来说,TcpClient
会更快,因为HttpWebRequest
必须做很多其他事情。。。例如,为HTTP请求构造头,并通过诸如分块请求之类的方式管理流连接。其中,TcpClient
只是原始连接,没有内置所有HTTP标准。TcpClient
对于大多数事情来说都会更快,因为HttpWebRequest
必须做很多其他事情。。。例如,为HTTP请求构造头,并通过诸如分块请求之类的方式管理流连接。其中,TcpClient
只是原始连接,没有内置所有HTTP标准。我更新了TcpClient示例。我忽略了流写入。好吧,但它仍然不是真正的苹果对苹果,因为你只是在写一堆数据和读取一堆数据。您没有HTTP所需的任何头解析等。现在,如果需要对生成的数据执行此操作,则必须包含该数据。如果由于协议不需要它而不需要它,那么您实际上只是在显示direct协议实际上“更瘦”,这并不奇怪。我更新了TcpClient示例。我忽略了流写入。好吧,但它仍然不是真正的苹果对苹果,因为你只是在写一堆数据和读取一堆数据。您没有HTTP所需的任何头解析等。现在,如果需要对生成的数据执行此操作,则必须包含该数据。如果由于协议不需要它而不这样做,那么您实际上只是表明direct协议实际上“更瘦”,这并不奇怪。您的TCP客户端也在做HTTP post吗?如果不是,那么正如乔恩所说,你是在拿苹果和桔子做比较。即使您正在使用TCP客户端执行HTTP post,HttpWebRequest中也总会有TcpClient中不存在的开销。例如,HttpWebRequest将遵守HTTP协议,如果Expect100Continue=true,它将在发布数据之前等待最长350ms(或者更早,如果服务器发送100 Continue响应)。但是,您直接发布数据。因此,如果服务器在100毫秒后响应“Http/1.1 100 continue”,这就是延迟的原因。最好的方法是使用Wireshark比较两者之间的网络嗅探,看看是什么造成了差异。您的TCP客户端也在做Http post吗?如果不是,那么正如乔恩所说,你是在拿苹果和桔子做比较。即使您正在使用TCP客户端执行HTTP post,HttpWebRequest中也总会有TcpClient中不存在的开销。例如,HttpWebRequest将遵守HTTP协议,如果Expect100Continue=true,它将在发布数据之前等待最长350ms(或者更早,如果服务器发送100 Continue响应)。但是,您直接发布数据。因此,如果服务器在100毫秒后响应“Http/1.1 100 continue”,这就是延迟的原因。最好的方法是使用Wireshark比较两者之间的网络嗅探,看看是什么造成了差异。