我需要优化我的代码,响应时间为1秒,ReadToEnd()它的时间为0.5秒,所有其他代码(与完整的web请求)只需要0.1秒。
request2.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
//This 1sec+
HttpWebResponse response = (HttpWebResponse)request2.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
//This 0.5sec+
string mem = sr.ReadToEnd();
sr.Close();
附言:关于200k+字符的超文本标记语言代码,但我只需要4-5。
发布于 2017-02-05 02:16:41
除了其他人关于使用using
和setting proxy to null
的建议之外,您可能还希望尝试只读取特定数量的字符,而不是读取所有字符。
var content = new char[10];
sr.Read(content, 0, content.Length);
string contentStr = new String(content);
发布于 2017-02-04 22:23:37
最有可能的原因是没有为您的HttpWebResponse
设置代理服务器而导致延迟。即使不使用代理,也始终建议设置代理。也可以尝试使用using
子句:
request2.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request2.Proxy = null;
using (HttpWebResponse response = (HttpWebResponse)request2.GetResponse())
{
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string mem = sr.ReadToEnd();
}
发布于 2017-02-04 22:33:53
最初的GetResponse调用生成一个安全协商、Get和excecute,然后生成一个HTTP响应,该响应的前几个字节包含Http响应码(200、500、404等)。
响应的正文可能已经被你的客户端Http缓冲区接收到了,或者还在流到它里面--你真的不知道。您的第二个调用(readToEnd)读取接收缓冲区中的所有字节并等待,直到服务器发送完Http标头中指示的所有字节。
您的代码不太可能对web服务调用的执行时间造成任何可观的成本,而且我看不到任何可能的优化步骤-您需要确定在没有客户端代码的情况下调用需要多长时间。
使用Telerik Fiddler跟踪从目标web服务调用的字节数,以及原始数据从服务器传输到客户端所花费的时间-只需在Fiddler内或在web浏览器上调用URL即可完成此操作。这将隔离您的代码、服务器或连接延迟耗费的时间。
https://stackoverflow.com/questions/42041400
复制相似问题