首页 / C# / c# – 多线程网络爬网程序线程限制
c# – 多线程网络爬网程序线程限制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 多线程网络爬网程序线程限制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1642字,纯文字阅读大概需要3分钟。
内容图文
![c# – 多线程网络爬网程序线程限制](/upload/InfoBanner/zyjiaocheng/756/b5c5b11c44ba456fbd9c6b21eac5aa26.jpg)
我可以访问用.NET C#编写的应用程序,它连接(主要使用“原始”http请求,部分Web服务和xml请求,仍然通过http)到许多外部系统并更新其中的一些内容.
在给定时间可能有很多工作排队,而增加吞吐量的天真方法是增加线程数.它背后的逻辑是:由于我们大多数时间都在等待网络回复,我们可以同时等待更多的网络回复. cpu和ram似乎没有达到极限.
仍然创建大约300个线程使得一切都比较低的线程数慢.
我想知道它是操作系统限制(Windows Server 2012 r2),.NET(4.5)限制还是其他什么?我怎样才能诊断出瓶颈在哪里? (正如我所说的cpu和ram似乎不是问题)
我知道外部系统可能会过载并降低整体性能,但我们假设这可以忽略不计.
解决方法:
最可能的问题是:
>作为注释中指示的AgentFire,ServicePointManager.DefaultConnectionLimit属性将限制您可以拥有到单个域的并发连接数.默认值为2.如果您尝试从多个请求中的单个服务器获取大量数据,那么您将受到限制.如果需要,可以增加此值.但请注意,服务器可能会将您的多个连接视为企图拒绝服务攻击,并阻止或限制您.
>看来.NET HTTP堆栈中的某些东西是单线程的.我怀疑它是在DNS解析中.我发现使用多个线程很容易保持每秒15到20个请求的吞吐量.这当然取决于您正在下载的文档的大小以及您正在与之通信的服务器的响应能力,但我运行爬虫的经验是天真的方法(每个线程使用HttpWebRequest一个请求),我最终平均每秒15到20个请求.
在#2的情况下,我怀疑是DNS,因为我运行了一个单独的测试,我在我正在使用的域上进行DNS解析,每个请求的平均值为50到60毫秒.大多数回来真快,但有些需要几秒钟.此外,当我在本地网络上放置一个大的DNS缓存时,我的吞吐量显着增加.
CPU和内存不会成为您的限制因素.除DNS解析外,您还必须考虑连接速度.如果您有10个并发连接,每个连接都以1 Mb /秒的速率从服务器下载,那么您将要满足10 Mb / s的Internet连接.您应该查看您正在使用的网络带宽.
根据我的经验,这些是最大的瓶颈.你应该调查每一个,看看是否有任何一个或多个是你认为表现不佳的原因.
内容总结
以上是互联网集市为您收集整理的c# – 多线程网络爬网程序线程限制全部内容,希望文章能够帮你解决c# – 多线程网络爬网程序线程限制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。