Når man laver opgaveplanlægning, er opgaven at simulere at igangsætte en HTTP-anmodning, og opdage, at når der er flere opgaver, virker opgaveplanlægningen som en falsk død.
Det maksimale standardantal anmodede forbindelser på et normalt Windows-system er 2, og på et serveroperativsystem er det standard 10. Hvis du ikke ændrer denne samtidige forbindelsesgrænse,Så er antallet af http-forbindelser, som klienten kan oprette samtidig, kun 2 eller 10。
System.Net.ServicePointManager.DefaultConnectionLimit Dette er det maksimale antal forbindelser, der kan få den nuværende standardindstilling, som vist i figuren nedenfor:
Er der en standard grænse for samtidighed for HttpClient?
Før .Net 4.0 blev Http-operationer brugt af HttpWebRequest. Den har som standard et meget konservativt maksimum på 2 samtidighedsgrænser for samme side, hvilket ofte betyder, at HttpWebRequests ikke får den ideelle hastighed som standard (jeg gætter på, at denne strategi frustrerer mange kodere), og værdien af App.config eller ServicePointManager.DefaultConnectionLimit skal ændres.
MS introducerede en HttpClient-klasse i .Net 4.5 til at håndtere HTTP-operationer, og jeg troede, at HttpClient og HttpWebRequest fulgte samme politik. I dag, da jeg skrev et multitrådet downloadprogram, brugte jeg 10 samtidige forbindelser og fandt ud af, at HttpClient som standard ikke har en grænse for samtidige numre.
Først troede jeg, det var det. Net 4.5 fjernede denne samtidighedsgrænse (trods alt følger stort set ingen denne standard nu), og omskrev derefter den relevante kode med WebRequest, og fandt ud af, at det stadig var 2 samtidighedsgrænse, og værdien af ServicePointManager.DefaultConnectionLimit var også 2. Det vil sige, at HttpClient ikke styres af HttpWebRequest-samtidighedspolitikken, og der er ingen systemniveau samtidighedsbegrænsning.
Derudover fandt jeg under test, at HttpWebRequest ikke automatisk har maksimalt 2 samtidighed for alle adresser. For eksempelDer er ingen samtidighedsgrænse for lokale HTTP-adresseforbindelser (http://localhost/*).。
C# multitrådet miljøkald til HttpWebRequest samtidig forbindelsesgrænse
.nets HttpWebRequest eller WebClient har en samtidig forbindelsesgrænse i tilfælde af multitrådning, som som standard er 2 på desktop-operativsystemer som Windows XP og Windows 7, og 10 som standard på serveroperativsystemer. Hvis du ikke ændrer denne samtidige forbindelsesgrænse, er antallet af HTTP-forbindelser, en klient kan lave ad gangen, kun 2 eller 10. For nogle applikationer, såsom browsere eller spiders, er antallet af 2 eller 10 samtidighed for lille og påvirker applikationens ydeevne betydeligt. Denne grænse for samtidige forbindelser skyldes HTTP 1.0- og HTTP 1.1-standarderne, som angiver maksimalt 2 samtidige forbindelser. Dog følger mainstream-browsere ikke længere denne regel, men .NET-rammen følger stadig denne regel som standard.
Mange artikler siger, at asynkron adgang til HttpWebRequest kan forbedre samtidig ydeevne, men jeg har testet, at hvis man ikke ændrer standardantallet af samtidige forbindelser, er synkron eller asynkron adgangsydelse ikke god.
Vi kan også sætte det maksimale antal samtidige forbindelser i app.config som følger:
Referenceartikel
Hyperlink-login er synlig.
Hyperlink-login er synlig.
|