C# (.NET),如何修复 Web 响应性能,经过的时间太多

C# (.NET), how to fix web response performance, too much elapsed time

我需要优化我的代码,响应耗时 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 个。

最有可能的是,没有为您的 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();
}

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

最初的 GetResponse 调用生成安全协商、Get 和执行,然后是 HTTP 响应,其前几个字节包含 Http 响应代码(200,500,404 等)。

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

您的代码不太可能对 Web 服务调用的执行时间造成任何明显的成本,而且我看不到任何可能的优化步骤 - 您需要确定在没有您的客户端代码的情况下调用需要多长时间.

使用 Telerik Fiddler 跟踪从目标 Web 服务调用的字节数,以及从服务器到客户端的原始传输所花费的时间 - 通过简单地调用 Fiddler 中的 URL 或在网络浏览器上。这将隔离您的代码、服务器或连接延迟是否耗时。

除了其他人关于使用 usingsetting proxy to null 的建议之外,您可能还想尝试只读取特定数量的字符,而不是读取所有字符。

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