我在抓取网站C#写了一个多线程程序,但是当我在后台请求启动提琴手完成12倍的速度更快,这对我来说真的很奇怪,当我关闭提琴手下载速率减慢起伏。 它是如何可能请大家帮忙,(有没有代理服务器设置我的连接到INETERNET和提琴手太),如果我可以注入我的应用程序小提琴手的性能,将是美好的,任何解决方案? 有没有幕后的任何魔法? :)
谢谢
我在抓取网站C#写了一个多线程程序,但是当我在后台请求启动提琴手完成12倍的速度更快,这对我来说真的很奇怪,当我关闭提琴手下载速率减慢起伏。 它是如何可能请大家帮忙,(有没有代理服务器设置我的连接到INETERNET和提琴手太),如果我可以注入我的应用程序小提琴手的性能,将是美好的,任何解决方案? 有没有幕后的任何魔法? :)
谢谢
其原因是对于其使用招时忽略了HTTP连接的量的极限。
我在使用中遇到相同的行为System.Net.Http.HttpClient
执行多个(〜80)的并发请求。 随着提琴手运行,所有的请求都完成得更快。 保持活动肯定已启用。
我用Wireshark来看看发生了什么和第一件事,我注意到,HTTP流量的方式是不同的。 随着提琴手的请求被扔一次全部和随之而来的反应很好地组合,以及之后。 如果没有提琴手的请求,用响应交错。
其次,TCPView的表明,我没有提琴手的代码创建只有2个TCP连接到服务器。 随着提琴手开始,连接的数量急剧增加。 共有来自我的应用程序提琴手,然后从提琴手服务器几十人。
众所周知的是,HTTP规范建议HTTP连接的数量应该不超过2个,似乎限制是在HTTP客户端默认设置来实现。
在.NET应用程序,我们可以控制的极限ServicePointManager.DefaultConnectionLimit
静态属性。 作为一个实验中,具有其设置为100制成具有或不具有的Fiddler执行相同的速度的请求。
该设置也可以通过控制的app.config:
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
现在,当使用招,为什么不尊重默认的连接限制? 原来的限制是不同的,当HTTP客户端使用代理和提琴手不作为代理。 我没有找到有关除了代理连接限制太多信息这老文章 。
你能告诉一些示例代码,使人们可以证实这一点? 否则,它会成为野生猜测。
我最好的猜测:菲德勒使用的keepalive这将节省一遍遍打开连接的麻烦。 您可以通过禁用这两个确认该Reuse client connections
,并Reuse connections to servers
:如果它是那么像往常一样(或更慢)慢,好处是从保持连接活着上涨。