增加 ServicePointManager.DefaultConnectionLimit 的缺点
本文关键字:缺点 DefaultConnectionLimit ServicePointManager 增加 | 更新日期: 2023-09-27 18:31:27
>我在多线程环境中调用网络服务。由于操作超时或错误请求,我的很多调用都失败了,但是如果我以线性方式进行,则没有一个调用失败,这意味着使用多个线程调用Web服务存在问题。经过大量分析,我发现并发连接的限制导致这些异常,所以我通过添加下面的代码来修复它。
ServicePointManager.DefaultConnectionLimit = 2 * _ThreadCount;
我不知道的是增加此限制的可能缺点。默认情况下,连接限制为 2。如果有人知道任何缺点,请告诉我。
MSDN 说:
更改 DefaultConnectionLimit 属性对现有属性没有影响 服务点对象;它仅影响以下服务点对象: 更改后初始化。如果此属性的值没有 直接或通过配置设置,值默认值 到常量 DefaultPersistentConnectionLimit。
和
注意
对 DefaultConnectionLimit 属性的任何更改都会影响 HTTP 1.0 和 HTTP 1.1 连接。无法单独更改 HTTP 1.0 和 HTTP 1.1 协议的连接限制。当用于 服务器环境 (ASP.NET) 默认连接限制默认为 连接数更多,即 10。
不,除了您的应用程序域会消耗更多资源之外,应该没有任何缺点。但在你的情况下,这是微不足道的。
事实上,它实际上可以帮助您使用更少的资源(内存),因为挂起的请求在 ServicePoint 内部排队。有关详细信息,请阅读此处:并行发送 HTTP 请求几个小时后,服务点对象较大
让我给你图片。我有大约 46K 个任务,这些任务以 100 个为批次运行(每个任务将调用 webservice),所以我有 100 个线程同时调用 webservivce。它仍然微不足道吗?还是会对我的情况产生一些影响?
它当然会产生影响。但影响取决于许多因素。每个主机都有一个服务点。
如果任务主要针对同一主机,请将DefaultConnectionLimit
增加到更大的值(当前执行批处理中的预期任务数)。
如果您主要针对不同的主机执行请求,则问题中的限制可以正常工作。
关于资源的使用,只要您的服务器不是被其他应用程序繁忙,就可能没问题。
你也应该意识到,它可能会在另一端伤害你。如果您给正在调用的 Web 服务带来很大负载,您可能会受到限制或列入黑名单。 例如,请参阅此博客。