Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 16497|Răspunde: 5

[Sursă] Concurență multithreaded .NET/C# folosind groapa HttpWebRequest

[Copiază linkul]
Postat la 20-12-2021 15:21:04 | | | |
Când faci programarea sarcinilor, sarcina de programare este să simulezi inițierea unei cereri HTTP și să constati că atunci când apar mai multe sarcini, programarea sarcinilor pare a fi ca o moarte falsă.

Numărul maxim implicit de conexiuni cerute pe un sistem Windows normal este 2, iar pe un sistem de operare server, implicit este 10. Dacă nu modifici această limită de conexiune concurentă,Atunci numărul de conexiuni http pe care clientul le poate face simultan este doar 2 sau 10

System.Net.ServicePointManager.DefaultConnectionLimit Acesta este numărul maxim de conexiuni care pot obține setarea implicită curentă, așa cum se arată în figura de mai jos:



Există o limită implicită de concurență pentru HttpClient?

Înainte de .Net 4.0, operațiunile Http erau bazate pe HttpWebRequest. Are un maxim foarte conservator de 2 limite de concurență pentru același site în mod implicit, ceea ce adesea face ca HttpWebRequests să nu obțină viteza ideală implicit (cred că această strategie îi frustrează pe mulți programatori), iar valoarea App.config sau ServicePointManager.DefaultConnectionLimit trebuie modificată.

MS a introdus o clasă HttpClient în .Net 4.5 pentru a gestiona operațiunile Http, iar eu credeam că HttpClient și HttpWebRequest urmează aceeași politică. Astăzi, când am scris un program de descărcare multi-threaded, am folosit 10 conexiuni concurente și am descoperit că HttpClient nu are implicit o limită de număr concurent.

La început am crezut că da. Net 4.5 a eliminat această limită de concurență (până la urmă, practic nimeni nu mai urmează acest standard acum), apoi a rescris codul relevant cu WebRequest, descoperind că era încă limita de concurență 2, iar valoarea ServicePointManager.DefaultConnectionLimit era tot 2. Adică, HttpClient nu este controlat de politica de concurență HttpWebRequest și nu există o limită de concurență la nivel de sistem.

În plus, în timpul testelor, am constatat că HttpWebRequest nu are o concurență maximă de 2 pentru toate adresele. De exempluNu există o limită de concurență pentru conexiunile locale de adrese HTTP (http://localhost/*).

Apeluri de mediu multithreaded C# la limita conexiunii concurente HttpWebRequest

HttpWebRequest-ul sau WebClient-ul .net are o limită de conexiune concurentă în cazul multithreading-ului, care este 2 implicit pe sistemele desktop precum Windows XP și Windows 7, și 10 implicit pe sistemele server. Dacă nu schimbi această limită de conexiuni concurente, numărul de conexiuni HTTP pe care un client le poate face simultan este doar 2 sau 10. Pentru unele aplicații, cum ar fi browserele sau păianjenii, numărul concurenței de 2 sau 10 este prea mic și afectează semnificativ performanța aplicației. Această limită a conexiunilor concurente se datorează standardelor HTTP 1.0 și HTTP 1.1 care specifică un maxim de 2 conexiuni concurente. Totuși, browserele mainstream nu mai urmează această regulă, dar framework-ul .NET încă o urmează implicit.

Multe articole spun că accesarea asincron a HttpWebRequest poate îmbunătăți performanța concurentă, dar am testat că dacă nu schimbi numărul implicit de conexiuni concurente, performanța accesului sincron sau asincron nu este bună.

De asemenea, putem seta numărul maxim de conexiuni concurente în app.config după cum urmează:

Articol de referință

Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.





Precedent:Xshell Xftp Pentru a continua să folosești acest program, trebuie să aplici cele mai recente...
Următor:Comanda Maven trimite pachete jar terțe către depozitele private Nexus
Postat la 26-12-2021 17:20:57 |
Învață să înveți。。。。。
Postat la 2022-1-10 08:42:47 |
Învață să înveți。。。。。
Postat la 2022-3-8 15:58:54 |
Învăța...
 Proprietarul| Postat la 2023-2-18 21:47:09 |
În plus, soluția

 Proprietarul| Postat la 2023-3-10 21:21:15 |
Configurează prin web.config

Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com