是否有更快的替代方法可以将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粘贴到浏览器窗口时,它显示xml文档大约需要35秒。
答案 0 :(得分:3)
(顺便说一句,你应该有一个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
}
}
}