C# ServicePoint配置-应用程序缺少http连接?

C# ServicePoint配置-应用程序缺少http连接?,c#,asp.net,iis,servicepoint,C#,Asp.net,Iis,Servicepoint,我有两个在IIS上运行的C#asp.net应用程序: 主应用程序最多创建80个线程,每个线程都将 以大约3秒的频率建立到certrain端点(所有相同端点(LAN))的http连接。 该端点托管在localhost上(例如localhost:4510)。 该端点是第二个应用程序,它表示最终将与LAN内的设备建立连接的“驱动程序”。 因此,有80个线程试图同时向驱动程序/设备发出请求是完全可能的 随着时间的推移,该应用程序似乎出现了任何涉及httpclients的问题。RavenDB、Elasti

我有两个在IIS上运行的C#asp.net应用程序: 主应用程序最多创建80个线程,每个线程都将 以大约3秒的频率建立到certrain端点(所有相同端点(LAN))的http连接。 该端点托管在localhost上(例如localhost:4510)。 该端点是第二个应用程序,它表示最终将与LAN内的设备建立连接的“驱动程序”。 因此,有80个线程试图同时向驱动程序/设备发出请求是完全可能的

随着时间的推移,该应用程序似乎出现了任何涉及httpclients的问题。RavenDB、Elasticsearch和80线。 我读了一些关于ServicePointManager类的内容;尤其是DefaultConnectionLimit和 MaxServicePoints及其对http吞吐量的影响。 我对底层机制只有基本的了解,所以我想问一下,我是否应该专注于某个特定的主题,或者我想检查哪些内容可能会提高http吞吐量

更新: 在当前配置下,CPU负载较低,内存消耗也较低。 以下代码显示了80个HttpClient如何连接到localhost:4510上的驱动程序:

var driverBaseAddressSp= ServicePointManager.FindServicePoint(driverBaseAddress);                               Debug.WriteLine(driverBaseAddressSp.ConnectionLimit);
Debug.WriteLine(driverBaseAddressSp.MaxIdleTime);
var connectionUriSp = ServicePointManager.FindServicePoint(connectionUri);
Debug.WriteLine(connectionUriSp.ConnectionLimit);
Debug.WriteLine(connectionUriSp.MaxIdleTime);
return new HttpClient { BaseAddress = driverBaseAddress }; 
ConnectionLimit在调试时显示Int.Max,但
我在解决方案中找不到任何配置?

可能有其他以更高优先级运行的应用程序/服务器正在锁定http。我不知道。但我会检查控制面板和内存使用情况。您可能超过了计算机中的内存量,然后使用交换空间(虚拟磁盘),这将减慢应用程序的速度。我更新了描述。在asp.net中生成线程是一种不好的做法,它会破坏高度优化的线程管理。HTTP调用自然是I/O绑定的,因此理想情况下,您可以将所有这些转换为
异步
,并且不需要额外的线程。此外,您应该知道,最好不要使用Task。Run,但我不能相信这是实际问题,因为我们没有任何CPU/内存问题。我也知道,重用httpclient会更好。事实上,我目前正在重构。。