除了下面的代码,还有什么更快的方法可以将http响应转换为字符串?
string req = "http://someaddress.com";
Stopwatch timer = new Stopwatch();
timer.Start();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(dataStream);
reader.ReadToEnd();
}
}
timer.Stop();
Console.WriteLine(timer.Elapsed);
响应很大-大约2MB,格式为XML.此代码完成后,计时器约等于50秒.当我将相同的URL粘贴到浏览器窗口中时,大约需要35秒才能显示xml文档.
解决方法:
(顺便说一句,您应该为回复提供一个using语句…并且我同意asbjornu的评论.您应该使用更多详细信息更新您的问题.)
您应该使用类似Wireshark的方法来查看每种情况下的请求和响应.例如,浏览器是否指定它支持压缩响应,而WebRequest不指定?如果连接速度较慢,那很可能是重要的部分.
要测试的另一件事是,.NET代码中的字符串解码是否要花费大量时间…如果您只是简单地将流中的数据读取到字节数组中(可能只是在读取时将其丢弃),那么速度明显快吗?例如:
using (var response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
// Just read the data and throw it away
byte[] buffer = new byte[16 * 1024];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
// Ignore the actual data
}
}
}