När man gör uppgiftsschemaläggning är uppgiften att simulera att initiera en HTTP-förfrågan och upptäcka att när det finns fler uppgifter känns uppgiftsschemaläggningen som en falsk död.
Det maximala standardantalet begärda anslutningar på ett normalt Windows-system är 2, och på ett serveroperativsystem är det som standard 10. Om du inte ändrar denna gräns för samtidiga anslutningar,Då är antalet http-anslutningar som klienten kan skapa samtidigt bara 2 eller 10。
System.Net.ServicePointManager.DefaultConnectionLimit Detta är det maximala antalet anslutningar som kan få den aktuella standardinställningen, som visas i figuren nedan:
Finns det en standardgräns för samtidighet för HttpClient?
Före .Net 4.0 förlitade sig HttpWebRequest på HTTP-operationer. Den har ett mycket konservativt maximum på 2 samtidighetsgränser för samma sajt som standard, vilket ofta gör att HttpWebRequests inte får den idealiska hastigheten som standard (jag antar att denna strategi frustrerar många kodare), och värdet på App.config eller ServicePointManager.DefaultConnectionLimit måste ändras.
MS introducerade en HttpClient-klass i .Net 4.5 för att hantera HTTP-operationer, och jag trodde att HttpClient och HttpWebRequest följde samma policy. Idag, när jag skrev ett flertrådat nedladdningsprogram, använde jag 10 samtidiga anslutningar och upptäckte att HttpClient som standard inte har någon gräns för samtidiga antal.
Först trodde jag det. Net 4.5 tog bort denna samtidighetsgräns (trots allt följer i princip ingen denna standard nu), och skrev sedan om relevant kod med WebRequest, och fann att det fortfarande var 2 samtidighetsgräns, och värdet på ServicePointManager.DefaultConnectionLimit var också 2. Det vill säga, HttpClient styrs inte av HttpWebRequest-samtidspolicyn, och det finns ingen systemnivågräns för samtidighet.
Dessutom upptäckte jag under testningen att HttpWebRequest inte har maximal 2 samtidighet för alla adresser. Till exempelDet finns ingen gräns för samtidighet för lokala HTTP-adressanslutningar (http://localhost/*).。
C# multitrådad miljöanrop till HttpWebRequest samtidigt anslutningsgräns
.nets HttpWebRequest eller WebClient har en gräns för samtidiga anslutningar vid multitrådning, vilket är 2 som standard på skrivbordsoperativsystem som Windows XP och Windows 7, och 10 som standard på serveroperativsystem. Om du inte ändrar denna gräns för samtidiga anslutningar är antalet HTTP-anslutningar som en klient kan göra samtidigt bara 2 eller 10. För vissa applikationer, såsom webbläsare eller spindlar, är antalet samtidiga 2 eller 10 för litet och påverkar applikationens prestanda kraftigt. Denna gräns för samtidiga anslutningar beror på HTTP 1.0- och HTTP 1.1-standarderna som specificerar maximalt 2 samtidiga anslutningar. Dock följer inte längre mainstream-webbläsare denna regel, men .NET-ramverket följer fortfarande denna regel som standard.
Många artiklar säger att asynkron åtkomst till HttpWebRequest kan förbättra samtidig prestanda, men jag har testat att om man inte ändrar standardantalet samtidiga anslutningar är synkron eller asynkron åtkomstprestanda inte bra.
Vi kan också ställa in det maximala antalet samtidiga anslutningar i app.config enligt följande:
Referensartikel
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
|