Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 16497|Antwoord: 5

[Bron] .NET/C# multithreaded gelijktijdigheid met behulp van de put van HttpWebRequest

[Link kopiëren]
Geplaatst op 20-12-2021 15:21:04 | | | |
Bij het plannen van taken is de taak van het plannen om het initiëren van een HTTP-verzoek te simuleren, en te ontdekken dat wanneer er meer taken zijn, de taakplanning lijkt op een nepdood.

Het maximale standaardaantal aangevraagde verbindingen op een normaal Windows-systeem is 2, en op een serverbesturingssysteem is het standaard 10. Als je deze gelijktijdige verbindingslimiet niet apast,Dan is het aantal http-verbindingen dat de client tegelijk kan maken slechts 2 of 10

System.Net.ServicePointManager.DefaultConnectionLimit Dit is het maximale aantal verbindingen dat de huidige standaardinstelling kan krijgen, zoals weergegeven in de onderstaande figuur:



Is er een standaard gelijktijdige limiet voor HttpClient?

Voor .Net 4.0 werd Http-operaties door HttpWebRequest gebruikt. Het heeft standaard een zeer conservatieve maximum van 2 gelijktijdigheidslimieten voor dezelfde site, wat er vaak voor zorgt dat HttpWebRequests standaard niet de ideale snelheid krijgen (ik denk dat deze strategie veel programmeurs frustreert), en de waarde van App.config of ServicePointManager.DefaultConnectionLimit moet worden aangepast.

Microsoft introduceerde een HttpClient-klasse in .Net 4.5 om HTTP-operaties af te handelen, en ik dacht dat HttpClient en HttpWebRequest hetzelfde beleid volgden. Vandaag, bij het schrijven van een multithreaded downloadprogramma, gebruikte ik 10 gelijktijdige verbindingen en ontdekte dat HttpClient standaard geen limiet heeft voor gelijktijdig aantal.

In het begin dacht ik van wel. Net 4.5 verwijderde deze gelijktijdige limiet (tenslotte volgt tegenwoordig vrijwel niemand meer deze standaard), en herschreef vervolgens de relevante code met WebRequest, en ontdekte dat het nog steeds 2 gelijktijdigheidslimiet was, en de waarde van ServicePointManager.DefaultConnectionLimit ook 2 was. Dat wil zeggen, HttpClient wordt niet beheerd door het HttpWebRequest-gelijktijdigheidsbeleid, en er is geen systeemniveau gelijktijdigheidslimiet.

Daarnaast ontdekte ik tijdens het testen dat HttpWebRequest niet standaard een maximum van 2 gelijktijdigheid voor alle adressen heeft. BijvoorbeeldEr is geen gelijktijdige limiet voor lokale HTTP-adresverbindingen (http://localhost/*).

C# multithreaded omgevingsaanroepen naar HttpWebRequest gelijktijdige verbindingslimiet

.net's HttpWebRequest of WebClient heeft een gelijktijdige verbindingslimiet in het geval van multithreading, die standaard 2 is op desktopbesturingssystemen zoals Windows XP en Windows 7, en standaard 10 op serverbesturingssystemen. Als je deze gelijktijdige verbindingslimiet niet verandert, is het aantal HTTP-verbindingen dat een client tegelijk kan maken slechts 2 of 10. Voor sommige toepassingen, zoals browsers of spinnen, is het aantal gelijktijdige momenten van 2 of 10 te klein en beïnvloedt het de prestaties van de applicatie aanzienlijk. Deze gelijktijdige verbindingslimiet is te danken aan de HTTP 1.0- en HTTP 1.1-standaarden die een maximum van 2 gelijktijdige verbindingen specificeren. Echter, reguliere browsers volgen deze regel niet meer, maar het .NET-framework volgt deze regel standaard nog steeds.

Veel artikelen zeggen dat asynchroon toegang tot HttpWebRequest de gelijktijdige prestaties kan verbeteren, maar ik heb getest dat als je het standaardaantal gelijktijdige verbindingen niet verandert, de synchrone of asynchrone toegangsprestaties niet goed zijn.

We kunnen ook het maximale aantal gelijktijdige verbindingen in app.config als volgt instellen:

Referentieartikel

De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.





Vorig:Xshell Xftp Om dit programma te blijven gebruiken, moet je de nieuwste toepassing toepassen...
Volgend:Het Maven-commando pusht jar-pakketten van derden naar Nexus private repositories
Geplaatst op 26-12-2021 17:20:57 |
Leer leren。。。。。
Geplaatst op 10-1-2022 08:42:47 |
Leer leren。。。。。
Geplaatst op 8-3-2022 15:58:54 |
Leren...
 Huisbaas| Geplaatst op 2023-2-18 21:47:09 |
Daarnaast is de oplossing

 Huisbaas| Geplaatst op 2023-3-10 21:21:15 |
Configureer via web.config

Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com