C#(.NET),如何修复web响应性能,运行时间过长



我需要优化我的代码,响应时间为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();  

第页。S: Html代码大约有200k+个字符,但我只需要4-5个。

很可能是因为没有为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();
}

初始的GetResponse调用生成一个安全协商Get和excecute,然后生成一个HTTP响应,其前几个字节包括HTTP响应代码(200500404等)。

响应的主体可能已经被您的客户端Http缓冲区接收到,或者仍在流式传输到其中——您真的无法判断。您的第二个调用(readToEnd)读取接收缓冲区中的所有字节,并等待,直到服务器发送了HttpHeader中指示的所有字节。

您的代码不太可能对web服务调用的执行时间造成任何可观的成本,而且我看不到任何可能的选择步骤——您需要确定在没有客户端代码的情况下调用需要多长时间。

使用Telerik Fiddler可以跟踪从目标web服务调用的字节数,以及从服务器到客户端的原始传输所需的时间-只需在Fiddler内或web浏览器上调用URL即可完成此操作。这将隔离是您的代码,还是服务器,或者连接延迟耗费时间。

在其他人建议使用usingsetting proxy to null的基础上,您可能还想尝试只读取特定数量的字符,而不是读取所有字符。

var content = new char[10];
sr.Read(content, 0, content.Length);
string contentStr = new String(content);

检查你的js脚本是否依赖于其他服务、存储库等。它以前在我的项目中为我工作过。下载它们并将其移动到本地文件夹

最新更新