HttpWebRequest / HttpWebResponse的速度

时间:2011-09-29 10:19:10

标签: c# httpwebrequest httpwebresponse

是否有更快的替代方法可以将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秒。

1 个答案:

答案 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
        }
    }
}