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粘贴到浏览器窗口中时,大约需要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
        }
    }
}
上一篇:读取HTTPWebReponse使用GetResponseStream readToEnd返回奇怪的字符


下一篇:C# WebProxy POST 或者 GET