首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# (.NET),如何修复web响应性能,运行时间过长

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

Stack Overflow用户
提问于 2017-02-04 22:18:28
回答 4查看 454关注 0票数 1

我需要优化我的代码,响应时间为1秒,ReadToEnd()它的时间为0.5秒,所有其他代码(与完整的web请求)只需要0.1秒。

代码语言:javascript
运行
复制
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。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-05 02:16:41

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

代码语言:javascript
运行
复制
var content = new char[10];
sr.Read(content, 0, content.Length);
string contentStr = new String(content);
票数 0
EN

Stack Overflow用户

发布于 2017-02-04 22:23:37

最有可能的原因是没有为您的HttpWebResponse设置代理服务器而导致延迟。即使不使用代理,也始终建议设置代理。也可以尝试使用using子句:

代码语言:javascript
运行
复制
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();
}
票数 2
EN

Stack Overflow用户

发布于 2017-02-04 22:33:53

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

响应的正文可能已经被你的客户端Http缓冲区接收到了,或者还在流到它里面--你真的不知道。您的第二个调用(readToEnd)读取接收缓冲区中的所有字节并等待,直到服务器发送完Http标头中指示的所有字节。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42041400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档