我需要优化我的代码,响应时间为1秒,ReadToEnd的经过时间() - 0.5秒,所有其他代码(完整网络请求)仅需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();
P.S:Html代码约200k +字符,但我只需要4-5。
答案 0 :(得分:2)
最有可能的是,未设置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();
}
答案 1 :(得分:2)
初始GetResponse调用生成安全协商,Get和excecute,然后是HTTP响应,其前几个字节包含Http响应代码(200,500,404等)。
您的客户端Http缓冲区可能已经收到了响应的正文,或者仍然正在流入它 - 您无法真正说出来。您的第二个调用(readToEnd)读取接收缓冲区中的所有字节,并等待服务器发送Http Header中指示的所有字节。
您的代码不太可能对Web服务调用的执行时间造成任何可观的成本,并且我看不到任何可能的验证步骤 - 您需要确定在没有客户端代码的情况下调用的时间。< / p>
使用Telerik Fiddler跟踪从目标Web服务调用的字节数,以及从服务器到客户端的原始传输时间 - 只需在Fiddler或Web浏览器中调用URL即可。这将隔离您的代码,服务器或连接延迟是否耗费时间。
答案 2 :(得分:0)
检查你的js脚本不依赖于其他服务,存储库等。在我的项目之前它曾经为我工作过。下载它们并将其移动到本地文件夹
答案 3 :(得分:0)
要添加其他使用using
和setting proxy to null
的建议,您可能还想尝试只读取特定数量的字符,而不是阅读所有内容。
var content = new char[10];
sr.Read(content, 0, content.Length);
string contentStr = new String(content);