架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5723|回复: 5

[资料] .NET/C# 多线程并发使用 HttpWebRequest 的坑

[复制链接]
发表于 2021-12-20 15:21:04 | 显示全部楼层 |阅读模式
在做任务调度,调度执行的任务是模拟发起 HTTP 请求,发现,当任务多了,任务调度好像就像假死了一样。

普通 Windows 系统最大默认请求连接数是 2,在服务器操作系统上默认为 10. 如果不修改这个并发连接限制,那么客户端同时可以建立的 http 连接数就只有2个或10个

System.Net.ServicePointManager.DefaultConnectionLimit 这个可以获取到当前默认设置的最大连接数,如下图:

QQ截图20211220151654.jpg

HttpClient是否有默认并发数限制?

在.Net 4.0之前,一直是依靠HttpWebRequest实现Http操作的。它默认有一个非常保守的同一站点下最大2并发数限制,导致默认情况下HttpWebRequest往往得不到理想的速度(估计这个策略郁闷了不少码农),必须修改App.config或ServicePointManager.DefaultConnectionLimit的值。

MS在.Net 4.5中引入了一个HttpClient类专门处理Http操作,本来我以为HttpClient和HttpWebRequest遵循一样的策略的。今天在写一个多线程下载的程序的时候,用到了10个并发连接,发现在默认的情况下,HttpClient并没有并发数限制。

最初我以为是.Net 4.5取消了这个并发数限制(毕竟现在基本上没有谁遵循这个标准了),然后用WebRequest重写了相关代码,发现依然是2并发上限,并且ServicePointManager.DefaultConnectionLimit的值也是2。也就是说: HttpClient不受HttpWebRequest并发策略控制,也没有系统级的并发限制。

另外,测试的时候发现,HttpWebRequest默认也不是对所有地址都2并发上限的。例如,对本地的http地址连接(http://localhost/*)就没有并发限制

C#多线程环境下调用 HttpWebRequest 并发连接限制

.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作系统上默认为10. 如果不修改这个并发连接限制,那么客户端同时可以建立的 http 连接数就只有2个或10个。对于一些诸如浏览器或网络蜘蛛的应用,2个或10个并发数量实在太少,大大影响应用的性能。之所以有这个并发连接限制,是因为 http 1.0 和 http 1.1 标准规定并发连接数最大为2. 不过目前主流的浏览器都已经不遵循这个规则了,但 .net framework 依然默认遵循这个规则。

很多文章说用异步方式访问 HttpWebRequest 可以提高并发性能,但我测试下来,如果不修改这个默认并发连接数,同步或异步方式访问性能都很不好。

我们也可以在app.config 中对最大并发连接数进行设置,方法如下:

参考文章

https://blog.csdn.net/defender_/article/details/91949613
https://www.cnblogs.com/quanying/p/4629827.html





上一篇:Xshell Xftp 要继续使用此程序,您必须应用最新的...
下一篇:Maven 命令将第三方 jar 包推送到 Nexus 私有仓库
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-12-26 17:20:57 | 显示全部楼层
学习学习。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-1-10 08:42:47 | 显示全部楼层
学习学习。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-3-8 15:58:54 | 显示全部楼层
学习。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-2-18 21:47:09 | 显示全部楼层
另外解决方案

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-3-10 21:21:15 | 显示全部楼层
通过 web.config 配置

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 14:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表