首页 > 解决方案 > 为什么默认情况下 ASP.NET Core 的 ServicePointManager.DefaultConnectionLimit 设置为 10?

问题描述

乍一看,在编写 ASP.NET Core 3.1 应用程序时,可能会认为只要你能处理所有传入请求,就会同时向其他 API 等发出一堆传出请求(假设你的 API 做了很多当然是传出 API 调用)。

我想知道这一点,因为当我阅读有关实际进行了多少次调用的文档时,我偶然发现了 ServicePointManager 和它的 property DefaultConnectionLimit。根据文档,默认值似乎是 10 :

ServicePoint 对象允许的最大并发连接数。ASP.NET 托管应用程序的默认连接限制为 10,所有其他应用程序的默认连接限制为 2。

例如,这ServicePointManager是使用的HttpClient,因此即使您每秒处理 1k 个传入请求,HttpClient在任何给定时间通过的传出请求数都不会超过 10 个。这就是我不明白的 - 这怎么可能很好地扩展?我的想法很天真,当然,.NET Core 本身并没有限制传出请求的数量,如果你的 API 通过 nuking 请求耗尽了其他 API,这将取决于你,但显然这永远不会发生在框,因为ServicePointManager默认情况下禁止这样做。

我已经看到“建议”在启动时调用的示例。ServicePointManager.DefaultConnectionLimit = int.MaxValue

但是为什么一开始就设置为 10 这么低的值呢?将其设置为 是否合理int.MaxValue

标签: performanceasp.net-core

解决方案


推荐阅读